Files
nodeMap/.next/server/components_MapComponent_js.js

35 lines
68 KiB
JavaScript

"use strict";
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
exports.id = "components_MapComponent_js";
exports.ids = ["components_MapComponent_js"];
exports.modules = {
/***/ "./components/MapComponent.js":
/*!************************************!*\
!*** ./components/MapComponent.js ***!
\************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var leaflet__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! leaflet */ \"leaflet\");\n/* harmony import */ var leaflet__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(leaflet__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var leaflet_dist_leaflet_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! leaflet/dist/leaflet.css */ \"./node_modules/leaflet/dist/leaflet.css\");\n/* harmony import */ var leaflet_dist_leaflet_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(leaflet_dist_leaflet_css__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var leaflet_contextmenu_dist_leaflet_contextmenu_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! leaflet-contextmenu/dist/leaflet.contextmenu.css */ \"./node_modules/leaflet-contextmenu/dist/leaflet.contextmenu.css\");\n/* harmony import */ var leaflet_contextmenu_dist_leaflet_contextmenu_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(leaflet_contextmenu_dist_leaflet_contextmenu_css__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var leaflet_contextmenu__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! leaflet-contextmenu */ \"leaflet-contextmenu\");\n/* harmony import */ var leaflet_contextmenu__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(leaflet_contextmenu__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _config_config_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../config/config.js */ \"./config/config.js\");\n// components/MapComponent.js\n\n\n\n\n\n\n\nconst MapComponent = ({ locations, onLocationUpdate })=>{\n const mapRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null); // Referenz auf das DIV-Element der Karte\n const [map, setMap] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); // Zustand der Karteninstanz\n const [online, setOnline] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(navigator.onLine); // Zustand der Internetverbindung\n const [GisStationsStaticDistrict, setGisStationsStaticDistrict] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]); // Zustand für statische Daten\n const [dataStatus, setDataStatus] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]); // Zustand für Statusdaten\n const [dataIcons, setDataIcons] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]); // Zustand für Icons\n const [dataSystem, setDataSystem] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]); // Zustand für Systemdaten\n // Konstanten für die URLs\n const mapGisStationsStaticDistrictUrl = _config_config_js__WEBPACK_IMPORTED_MODULE_6__.mapGisStationsStaticDistrictUrl;\n const mapDataStatusUrl = _config_config_js__WEBPACK_IMPORTED_MODULE_6__.mapDataStatusUrl;\n const mapDataIconUrl = _config_config_js__WEBPACK_IMPORTED_MODULE_6__.mapDataIconUrl;\n const mapDataSystemUrl = _config_config_js__WEBPACK_IMPORTED_MODULE_6__.mapDataSystemUrl;\n console.log(\"GisStationsStaticDistrict 1 :\", GisStationsStaticDistrict);\n console.log(\"map:\", map);\n //------------------------------------------\n // API-Daten laden für GisStationsStaticDistrict\n //http://10.10.0.13/talas5/ClientData/WebServiceMap.asmx/GisStationsStaticDistrict?idMap=10&idUser=485\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const fetchData = async ()=>{\n try {\n console.log(\"Datenabruf gestartet...\");\n const response = await fetch(_config_config_js__WEBPACK_IMPORTED_MODULE_6__.mapGisStationsStaticDistrictUrl);\n const jsonResponse = await response.json();\n // Prüfen, ob die Antwort das erwartete Format hat und Daten enthält\n if (jsonResponse && jsonResponse.Points) {\n console.log(\"GisStationsStaticDistrict geladen:\", jsonResponse.Points);\n setGisStationsStaticDistrict(jsonResponse.Points); // Direkter Zugriff auf 'Points'\n } else {\n console.error('Erwartete Daten im \"Points\"-Array nicht gefunden', jsonResponse);\n setGisStationsStaticDistrict([]);\n }\n } catch (error) {\n console.error(\"Fehler beim Laden der Daten: \", error);\n setGisStationsStaticDistrict([]);\n }\n };\n fetchData();\n }, []); // Dependency-Array ist leer, um den Effekt nur beim Mount auszuführen\n //------------------------------------------\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n // Prüfen der Internetverbindung beim Start\n console.log(\"Pr\\xfcfen der Internetverbindung...\");\n checkInternet();\n // Asynchrones Laden der Kartendaten beim Initialisieren der Komponente\n const fetchData = async ()=>{\n try {\n console.log(\"Datenabruf gestartet...\");\n const responses = await Promise.all([\n fetch(_config_config_js__WEBPACK_IMPORTED_MODULE_6__.mapGisStationsStaticDistrictUrl).then((res)=>res.json()),\n fetch(_config_config_js__WEBPACK_IMPORTED_MODULE_6__.mapDataStatusUrl).then((res)=>res.json()),\n fetch(_config_config_js__WEBPACK_IMPORTED_MODULE_6__.mapDataIconUrl).then((res)=>res.json()),\n fetch(_config_config_js__WEBPACK_IMPORTED_MODULE_6__.mapDataSystemUrl).then((res)=>res.json())\n ]);\n console.log(\"Daten erfolgreich geladen.\");\n setGisStationsStaticDistrict(responses[0].Points);\n setDataStatus(responses[1].Statis);\n setDataIcons(responses[2].List);\n setDataSystem(responses[3].Systems.filter((system)=>system.Allow === 1));\n } catch (error) {\n console.error(\"Fehler beim Laden der Daten: \", error);\n }\n };\n fetchData();\n }, []); // Leeres Abhängigkeitsarray, um nur beim ersten Mount zu laden\n const offlineTileLayer = \"../TileMap/mapTiles/{z}/{x}/{y}.png\";\n const onlineTileLayer = \"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\";\n // Create map layers\n const TALAS = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n const ECI = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n const ULAF = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n const GSMModem = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n const CiscoRouter = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n const WAGO = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n const Siemens = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n const OTDR = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n const WDM = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n const GMA = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n const Sonstige = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n const TALASICL = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n let initialMap = [];\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n console.log(\"Server URL from config:\", _config_config_js__WEBPACK_IMPORTED_MODULE_6__.serverURL);\n if (false) {}\n }, []);\n // Funktionen zur Überwachung der Internetverbindung\n const checkInternet = ()=>{\n console.log(\"Checking internet connectivity...\");\n fetch(\"https://tile.openstreetmap.org/1/1/1.png\", {\n method: \"HEAD\"\n }).then((response)=>setOnline(response.ok)).catch(()=>setOnline(false));\n };\n // Initialisiere die Karte\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (mapRef.current && !map) {\n initialMap = leaflet__WEBPACK_IMPORTED_MODULE_2___default().map(mapRef.current, {\n center: [\n 53.111111,\n 8.4625\n ],\n zoom: 10,\n layers: [\n TALAS,\n ECI,\n ULAF,\n GSMModem,\n CiscoRouter,\n WAGO,\n Siemens,\n OTDR,\n WDM,\n GMA,\n Sonstige,\n TALASICL\n ],\n zoomControl: false,\n contextmenu: true,\n contextmenuItems: [\n {\n text: \"Station hinzuf\\xfcgen\",\n callback: showAddStationPopup\n },\n {\n text: \"Station \\xf6ffnen (Tab)\",\n icon: \"img/screen_new.png\",\n callback: newLink\n },\n {\n text: \"Station \\xf6ffnen\",\n icon: \"img/screen_same.png\",\n callback: sameLink\n },\n {\n text: \"Koordinaten\",\n icon: \"img/screen_same.png\",\n callback: lata\n },\n \"-\",\n {\n text: \"Reinzoomen\",\n callback: zoomIn\n },\n {\n text: \"Rauszoomen\",\n callback: zoomOut\n },\n {\n text: \"Hier zentrieren\",\n callback: centerHere\n }\n ]\n });\n leaflet__WEBPACK_IMPORTED_MODULE_2___default().tileLayer(online ? onlineTileLayer : offlineTileLayer, {\n attribution: '&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'\n }).addTo(initialMap);\n setMap(initialMap);\n }\n }, [\n mapRef,\n map\n ]);\n // Handle online/offline status\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n window.addEventListener(\"online\", checkInternet);\n window.addEventListener(\"offline\", checkInternet);\n return ()=>{\n window.removeEventListener(\"online\", checkInternet);\n window.removeEventListener(\"offline\", checkInternet);\n };\n }, []);\n // Update map layers based on online status\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (map) {\n const newLayer = leaflet__WEBPACK_IMPORTED_MODULE_2___default().tileLayer(online ? onlineTileLayer : offlineTileLayer, {\n minZoom: 7,\n maxZoom: online ? 19 : 14,\n attribution: 'Map data \\xa9 <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'\n });\n map.eachLayer((layer)=>{\n if (layer instanceof (leaflet__WEBPACK_IMPORTED_MODULE_2___default().TileLayer)) {\n map.removeLayer(layer);\n }\n });\n newLayer.addTo(map);\n }\n }, [\n online,\n map\n ]);\n // Marker handling\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n // Remove old markers\n if (map) {\n map.eachLayer((layer)=>{\n if (layer instanceof (leaflet__WEBPACK_IMPORTED_MODULE_2___default().Marker)) {\n map.removeLayer(layer);\n }\n });\n // Add new markers\n locations.forEach((location)=>{\n const { latitude, longitude } = parsePoint(location.position);\n const marker = leaflet__WEBPACK_IMPORTED_MODULE_2___default().marker([\n latitude,\n longitude\n ], {\n icon: leaflet__WEBPACK_IMPORTED_MODULE_2___default().icon({\n iconUrl: \"/location.svg\",\n iconSize: [\n 34,\n 34\n ],\n iconAnchor: [\n 17,\n 34\n ],\n popupAnchor: [\n 0,\n -34\n ]\n }),\n draggable: true,\n id: location.idPoi\n });\n marker.bindPopup(`<b>${location.description || \"Unbekannt\"}</b><br>Type: ${location.idPoiTyp || \"N/A\"}<br>Lat: ${latitude.toFixed(5)}, Lng: ${longitude.toFixed(5)}`);\n marker.on(\"dragend\", function(e) {\n const newLat = e.target.getLatLng().lat;\n const newLng = e.target.getLatLng().lng;\n const markerId = e.target.options.id;\n updateLocationInDatabase(markerId, newLat, newLng).then(()=>{\n onLocationUpdate(markerId, newLat, newLng);\n });\n });\n marker.addTo(map);\n });\n }\n }, [\n map,\n locations,\n onLocationUpdate\n ]);\n //------------------------------------------\n function parsePoint(pointString) {\n const match = pointString.match(/POINT\\s*\\((\\d+(\\.\\d+)?)\\s+(\\d+(\\.\\d+)?)\\)/);\n if (match) {\n return {\n longitude: parseFloat(match[1]),\n latitude: parseFloat(match[3])\n };\n } else {\n // Handle the error or return a default/fallback value\n console.error(\"Invalid POINT format:\", pointString);\n return null; // Oder eine sinnvolle Standardantwort\n }\n }\n //----------------------------------\n //-----Kontextmenu----------------\n const newLink = (e)=>{\n try {\n if (!e.relatedTarget || !e.relatedTarget.options) {\n throw new Error(\"relatedTarget or options not defined\");\n }\n alert(\"Neues Fenster: \" + e.relatedTarget.options.test);\n window.open(`../devices/${e.relatedTarget.options.test}`, \"_blank\").focus();\n } catch (error) {\n console.error(\"Failed in newLink function:\", error);\n }\n };\n const sameLink = (e)=>{\n alert(e.relatedTarget.options.test);\n window.open(\"../devices/\" + e.relatedTarget.options.test, \"_parent\").focus();\n };\n const lata = (e)=>{\n alert(\"Breitengrad: \" + e.latlng.lat);\n };\n const zoomIn = (e)=>{\n initialMap.flyTo(e.latlng, 12);\n };\n const zoomOut = (e)=>{\n fly();\n };\n const centerHere = (e)=>{\n initialMap.panTo(e.latlng);\n };\n const showCoordinates = (e)=>{\n alert(\"Breitengrad: \" + e.latlng.lat + \"\\nL\\xe4ngengrad: \" + e.latlng.lng);\n };\n const showData = (e)=>{\n console.log(e);\n };\n const showTalas = (e)=>{\n map.addLayer(TALAS);\n loadData();\n };\n const hideTalas = (e)=>{\n map.removeLayer(TALAS);\n loadData();\n };\n const showGSM = (e)=>{\n map.addLayer(GMA);\n loadData();\n };\n const hideGSM = (e)=>{\n map.removeLayer(GMA);\n loadData();\n };\n //-----Kontextmenu----ende------------\n // Ensure this function is only called when map is initialized and available\n const showAddStationPopup = (e)=>{\n if (!initialMap) {\n console.log(\"Map is not initialized.\");\n return;\n }\n const popupContent = leaflet__WEBPACK_IMPORTED_MODULE_2___default().DomUtil.create(\"div\");\n popupContent.innerHTML = `\r\n <form id=\"addStationForm\" class=\"m-0 p-2 w-full\">\r\n <div class=\"flex items-center mb-4\"> \r\n <label for=\"name\" class=\"block mr-2 flex-none\">Name:</label>\r\n <input\r\n type=\"text\"\r\n id=\"name\"\r\n name=\"name\"\r\n placeholder=\"Name der Station\"\r\n class=\"block p-2 flex-grow border-2 border-gray-200 rounded-md text-sm\"\r\n />\r\n </div>\r\n \r\n <div class=\"flex items-center mb-4\"> \r\n <label for=\"type\" class=\"block mr-3 flex-none\">Type:</label>\r\n <input\r\n type=\"text\"\r\n id=\"type\"\r\n name=\"type\"\r\n placeholder=\"Typ der Station\"\r\n class=\"block p-2 flex-grow border-2 border-gray-200 rounded-md text-sm\"\r\n />\r\n </div>\r\n \r\n <div class=\"flex items-center mb-4\">\r\n <label for=\"lat\" class=\"block mr-2 flex-none\">Breitengrad:</label>\r\n <input\r\n type=\"text\"\r\n id=\"lat\"\r\n name=\"lat\"\r\n value=\"${e.latlng.lat.toFixed(5)}\"\r\n readonly\r\n class=\"block p-2 flex-grow border-2 border-gray-200 rounded-md text-sm\"\r\n />\r\n </div>\r\n \r\n <div class=\"flex items-center mb-4\"> \r\n <label for=\"lng\" class=\"block mr-2 flex-none\">Längengrad:</label>\r\n <input\r\n type=\"text\"\r\n id=\"lng\"\r\n name=\"lng\"\r\n value=\"${e.latlng.lng.toFixed(5)}\"\r\n readonly\r\n class=\"block p-2 flex-grow border-2 border-gray-200 rounded-md text-sm\"\r\n />\r\n </div>\r\n \r\n <button\r\n type=\"submit\"\r\n class=\"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded w-full\"\r\n >\r\n Station hinzufügen\r\n </button>\r\n</form>\r\n `;\n leaflet__WEBPACK_IMPORTED_MODULE_2___default().popup().setLatLng(e.latlng).setContent(popupContent).openOn(initialMap);\n // Attach event listener here\n leaflet__WEBPACK_IMPORTED_MODULE_2___default().DomEvent.on(popupContent, \"submit\", handleSubmit);\n };\n /*\r\n const handleSubmit = (event) => {\r\n event.preventDefault();\r\n const form = event.target;\r\n const data = {\r\n name: form.name.value,\r\n type: form.type.value,\r\n latitude: form.lat.value,\r\n longitude: form.lng.value,\r\n };\r\n\r\n onAddLocation(name, type, lat, lng);\r\n console.log(\"Name: \", name, \"Type: \", type, \"Lat: \", lat, \"Lng: \", lng);\r\n map.closePopup();\r\n };\r\n*/ // Funktion zum Hinzufügen eines neuen Standorts\n async function handleSubmit(event) {\n event.preventDefault();\n const form = event.target;\n const data = {\n name: form.name.value,\n type: form.type.value,\n latitude: form.lat.value,\n longitude: form.lng.value\n };\n try {\n const response = await fetch(\"/api/addLocation\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(data)\n });\n const result = await response.json();\n if (response.ok) {\n console.log(\"Standort hinzugef\\xfcgt:\", result);\n alert(\"Standort erfolgreich hinzugef\\xfcgt!\");\n form.reset(); // Formular zurücksetzen\n // Hier könntest du weitere Aktionen durchführen, wie das Schließen des Popups oder das Aktualisieren der Marker auf der Karte\n } else {\n throw new Error(result.error || \"Ein unbekannter Fehler ist aufgetreten.\");\n }\n } catch (error) {\n console.error(\"Fehler beim Hinzuf\\xfcgen des Standorts:\", error);\n alert(error.message);\n }\n }\n function fly(stationValue) {\n var x = 51.41321407879154;\n var y = 7.739617925303934;\n var zoom = 7;\n /* for (var i = 0; i < GisStationsStaticDistrictlength; i++) {\r\n var gisStatics = GisStationsStaticDistrict[i];\r\n if (stationValue === gisStatics.Area_Name) {\r\n //console.log(gisStatics.X+\",\"+gisStatics.Y);\r\n x = gisStatics.X;\r\n y = gisStatics.Y;\r\n }\r\n }\r\n if (y === 7.739617925303934) {\r\n zoom = 8;\r\n } */ initialMap.flyTo([\n x,\n y\n ], zoom);\n /* var popup = new L.Popup();\r\n oms.addListener(\"click\", function (marker) {\r\n popup.setContent(marker.desc);\r\n popup.setLatLng(marker.getLatLng());\r\n map.openPopup(popup);\r\n });\r\n\r\n for (var i = 0; i < window.mapData.length; i++) {\r\n var datum = window.mapData[i];\r\n var loc = new L.LatLng(datum.lat, datum.lon);\r\n var marker = new L.Marker(loc);\r\n marker.desc = datum.d;\r\n map.addLayer(marker);\r\n //oms.addMarker(marker); // <-- here\r\n } */ }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n id: \"map\",\n ref: mapRef,\n style: {\n height: \"100vh\",\n width: \"100vw\",\n overflow: \"hidden\"\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\isa.LTW\\\\Desktop\\\\16.04.2024\\\\wwwrootTalas5NodeMap\\\\components\\\\MapComponent.js\",\n lineNumber: 493,\n columnNumber: 5\n }, undefined);\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MapComponent);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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dXJjZXNDb250ZW50IjpbIi8vIGNvbXBvbmVudHMvTWFwQ29tcG9uZW50LmpzXHJcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IEwgZnJvbSBcImxlYWZsZXRcIjtcclxuaW1wb3J0IFwibGVhZmxldC9kaXN0L2xlYWZsZXQuY3NzXCI7XHJcbmltcG9ydCBcImxlYWZsZXQtY29udGV4dG1lbnUvZGlzdC9sZWFmbGV0LmNvbnRleHRtZW51LmNzc1wiO1xyXG5pbXBvcnQgXCJsZWFmbGV0LWNvbnRleHRtZW51XCI7XHJcbmltcG9ydCAqIGFzIGNvbmZpZyBmcm9tIFwiLi4vY29uZmlnL2NvbmZpZy5qc1wiO1xyXG5jb25zdCBNYXBDb21wb25lbnQgPSAoeyBsb2NhdGlvbnMsIG9uTG9jYXRpb25VcGRhdGUgfSkgPT4ge1xyXG4gIGNvbnN0IG1hcFJlZiA9IHVzZVJlZihudWxsKTsgLy8gUmVmZXJlbnogYXVmIGRhcyBESVYtRWxlbWVudCBkZXIgS2FydGVcclxuICBjb25zdCBbbWFwLCBzZXRNYXBdID0gdXNlU3RhdGUobnVsbCk7IC8vIFp1c3RhbmQgZGVyIEthcnRlbmluc3RhbnpcclxuICBjb25zdCBbb25saW5lLCBzZXRPbmxpbmVdID0gdXNlU3RhdGUobmF2aWdhdG9yLm9uTGluZSk7IC8vIFp1c3RhbmQgZGVyIEludGVybmV0dmVyYmluZHVuZ1xyXG4gIGNvbnN0IFtHaXNTdGF0aW9uc1N0YXRpY0Rpc3RyaWN0LCBzZXRHaXNTdGF0aW9uc1N0YXRpY0Rpc3RyaWN0XSA9IHVzZVN0YXRlKFxyXG4gICAgW11cclxuICApOyAvLyBadXN0YW5kIGbDvHIgc3RhdGlzY2hlIERhdGVuXHJcbiAgY29uc3QgW2RhdGFTdGF0dXMsIHNldERhdGFTdGF0dXNdID0gdXNlU3RhdGUoW10pOyAvLyBadXN0YW5kIGbDvHIgU3RhdHVzZGF0ZW5cclxuICBjb25zdCBbZGF0YUljb25zLCBzZXREYXRhSWNvbnNdID0gdXNlU3RhdGUoW10pOyAvLyBadXN0YW5kIGbDvHIgSWNvbnNcclxuICBjb25zdCBbZGF0YVN5c3RlbSwgc2V0RGF0YVN5c3RlbV0gPSB1c2VTdGF0ZShbXSk7IC8vIFp1c3RhbmQgZsO8ciBTeXN0ZW1kYXRlblxyXG5cclxuICAvLyBLb25zdGFudGVuIGbDvHIgZGllIFVSTHNcclxuICBjb25zdCBtYXBHaXNTdGF0aW9uc1N0YXRpY0Rpc3RyaWN0VXJsID1cclxuICAgIGNvbmZpZy5tYXBHaXNTdGF0aW9uc1N0YXRpY0Rpc3RyaWN0VXJsO1xyXG4gIGNvbnN0IG1hcERhdGFTdGF0dXNVcmwgPSBjb25maWcubWFwRGF0YVN0YXR1c1VybDtcclxuICBjb25zdCBtYXBEYXRhSWNvblVybCA9IGNvbmZpZy5tYXBEYXRhSWNvblVybDtcclxuICBjb25zdCBtYXBEYXRhU3lzdGVtVXJsID0gY29uZmlnLm1hcERhdGFTeXN0ZW1Vcmw7XHJcblxyXG4gIGNvbnNvbGUubG9nKFwiR2lzU3RhdGlvbnNTdGF0aWNEaXN0cmljdCAxIDpcIiwgR2lzU3RhdGlvbnNTdGF0aWNEaXN0cmljdCk7XHJcbiAgY29uc29sZS5sb2coXCJtYXA6XCIsIG1hcCk7XHJcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBBUEktRGF0ZW4gbGFkZW4gZsO8ciBHaXNTdGF0aW9uc1N0YXRpY0Rpc3RyaWN0XHJcbiAgLy9odHRwOi8vMTAuMTAuMC4xMy90YWxhczUvQ2xpZW50RGF0YS9XZWJTZXJ2aWNlTWFwLmFzbXgvR2lzU3RhdGlvbnNTdGF0aWNEaXN0cmljdD9pZE1hcD0xMCZpZFVzZXI9NDg1XHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIGNvbnN0IGZldGNoRGF0YSA9IGFzeW5jICgpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkRhdGVuYWJydWYgZ2VzdGFydGV0Li4uXCIpO1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goY29uZmlnLm1hcEdpc1N0YXRpb25zU3RhdGljRGlzdHJpY3RVcmwpO1xyXG4gICAgICAgIGNvbnN0IGpzb25SZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuXHJcbiAgICAgICAgLy8gUHLDvGZlbiwgb2IgZGllIEFudHdvcnQgZGFzIGVyd2FydGV0ZSBGb3JtYXQgaGF0IHVuZCBEYXRlbiBlbnRow6RsdFxyXG4gICAgICAgIGlmIChqc29uUmVzcG9uc2UgJiYganNvblJlc3BvbnNlLlBvaW50cykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgIFwiR2lzU3RhdGlvbnNTdGF0aWNEaXN0cmljdCBnZWxhZGVuOlwiLFxyXG4gICAgICAgICAgICBqc29uUmVzcG9uc2UuUG9pbnRzXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgc2V0R2lzU3RhdGlvbnNTdGF0aWNEaXN0cmljdChqc29uUmVzcG9uc2UuUG9pbnRzKTsgLy8gRGlyZWt0ZXIgWnVncmlmZiBhdWYgJ1BvaW50cydcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgJ0Vyd2FydGV0ZSBEYXRlbiBpbSBcIlBvaW50c1wiLUFycmF5IG5pY2h0IGdlZnVuZGVuJyxcclxuICAgICAgICAgICAganNvblJlc3BvbnNlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgc2V0R2lzU3RhdGlvbnNTdGF0aWNEaXN0cmljdChbXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGZWhsZXIgYmVpbSBMYWRlbiBkZXIgRGF0ZW46IFwiLCBlcnJvcik7XHJcbiAgICAgICAgc2V0R2lzU3RhdGlvbnNTdGF0aWNEaXN0cmljdChbXSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgZmV0Y2hEYXRhKCk7XHJcbiAgfSwgW10pOyAvLyBEZXBlbmRlbmN5LUFycmF5IGlzdCBsZWVyLCB1bSBkZW4gRWZmZWt0IG51ciBiZWltIE1vdW50IGF1c3p1ZsO8aHJlblxyXG5cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAvLyBQcsO8ZmVuIGRlciBJbnRlcm5ldHZlcmJpbmR1bmcgYmVpbSBTdGFydFxyXG4gICAgY29uc29sZS5sb2coXCJQcsO8ZmVuIGRlciBJbnRlcm5ldHZlcmJpbmR1bmcuLi5cIik7XHJcbiAgICBjaGVja0ludGVybmV0KCk7XHJcblxyXG4gICAgLy8gQXN5bmNocm9uZXMgTGFkZW4gZGVyIEthcnRlbmRhdGVuIGJlaW0gSW5pdGlhbGlzaWVyZW4gZGVyIEtvbXBvbmVudGVcclxuICAgIGNvbnN0IGZldGNoRGF0YSA9IGFzeW5jICgpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkRhdGVuYWJydWYgZ2VzdGFydGV0Li4uXCIpO1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFtcclxuICAgICAgICAgIGZldGNoKGNvbmZpZy5tYXBHaXNTdGF0aW9uc1N0YXRpY0Rpc3RyaWN0VXJsKS50aGVuKChyZXMpID0+XHJcbiAgICAgICAgICAgIHJlcy5qc29uKClcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBmZXRjaChjb25maWcubWFwRGF0YVN0YXR1c1VybCkudGhlbigocmVzKSA9PiByZXMuanNvbigpKSxcclxuICAgICAgICAgIGZldGNoKGNvbmZpZy5tYXBEYXRhSWNvblVybCkudGhlbigocmVzKSA9PiByZXMuanNvbigpKSxcclxuICAgICAgICAgIGZldGNoKGNvbmZpZy5tYXBEYXRhU3lzdGVtVXJsKS50aGVuKChyZXMpID0+IHJlcy5qc29uKCkpLFxyXG4gICAgICAgIF0pO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGF0ZW4gZXJmb2xncmVpY2ggZ2VsYWRlbi5cIik7XHJcbiAgICAgICAgc2V0R2lzU3RhdGlvbnNTdGF0aWNEaXN0cmljdChyZXNwb25zZXNbMF0uUG9pbnRzKTtcclxuICAgICAgICBzZXREYXRhU3RhdHVzKHJlc3BvbnNlc1sxXS5TdGF0aXMpO1xyXG4gICAgICAgIHNldERhdGFJY29ucyhyZXNwb25zZXNbMl0uTGlzdCk7XHJcbiAgICAgICAgc2V0RGF0YVN5c3RlbShcclxuICAgICAgICAgIHJlc3BvbnNlc1szXS5TeXN0ZW1zLmZpbHRlcigoc3lzdGVtKSA9PiBzeXN0ZW0uQWxsb3cgPT09IDEpXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRmVobGVyIGJlaW0gTGFkZW4gZGVyIERhdGVuOiBcIiwgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGZldGNoRGF0YSgpO1xyXG4gIH0sIFtdKTsgLy8gTGVlcmVzIEFiaMOkbmdpZ2tlaXRzYXJyYXksIHVtIG51ciBiZWltIGVyc3RlbiBNb3VudCB6dSBsYWRlblxyXG5cclxuICBjb25zdCBvZmZsaW5lVGlsZUxheWVyID0gXCIuLi9UaWxlTWFwL21hcFRpbGVzL3t6fS97eH0ve3l9LnBuZ1wiO1xyXG4gIGNvbnN0IG9ubGluZVRpbGVMYXllciA9IFwiaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmdcIjtcclxuICAvLyBDcmVhdGUgbWFwIGxheWVyc1xyXG4gIGNvbnN0IFRBTEFTID0gbmV3IEwubGF5ZXJHcm91cCgpO1xyXG4gIGNvbnN0IEVDSSA9IG5ldyBMLmxheWVyR3JvdXAoKTtcclxuICBjb25zdCBVTEFGID0gbmV3IEwubGF5ZXJHcm91cCgpO1xyXG4gIGNvbnN0IEdTTU1vZGVtID0gbmV3IEwubGF5ZXJHcm91cCgpO1xyXG4gIGNvbnN0IENpc2NvUm91dGVyID0gbmV3IEwubGF5ZXJHcm91cCgpO1xyXG4gIGNvbnN0IFdBR08gPSBuZXcgTC5sYXllckdyb3VwKCk7XHJcbiAgY29uc3QgU2llbWVucyA9IG5ldyBMLmxheWVyR3JvdXAoKTtcclxuICBjb25zdCBPVERSID0gbmV3IEwubGF5ZXJHcm91cCgpO1xyXG4gIGNvbnN0IFdETSA9IG5ldyBMLmxheWVyR3JvdXAoKTtcclxuICBjb25zdCBHTUEgPSBuZXcgTC5sYXllckdyb3VwKCk7XHJcbiAgY29uc3QgU29uc3RpZ2UgPSBuZXcgTC5sYXllckdyb3VwKCk7XHJcbiAgY29uc3QgVEFMQVNJQ0wgPSBuZXcgTC5sYXllckdyb3VwKCk7XHJcblxyXG4gIGxldCBpbml0aWFsTWFwID0gW107XHJcblxyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBjb25zb2xlLmxvZyhcIlNlcnZlciBVUkwgZnJvbSBjb25maWc6XCIsIGNvbmZpZy5zZXJ2ZXJVUkwpO1xyXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJXaW5kb3cgaGVpZ2h0IGZyb20gY29uZmlnOlwiLCBjb25maWcud2luZG93SGVpZ2h0KTtcclxuICAgIH1cclxuICB9LCBbXSk7XHJcblxyXG4gIC8vIEZ1bmt0aW9uZW4genVyIMOcYmVyd2FjaHVuZyBkZXIgSW50ZXJuZXR2ZXJiaW5kdW5nXHJcbiAgY29uc3QgY2hlY2tJbnRlcm5ldCA9ICgpID0+IHtcclxuICAgIGNvbnNvbGUubG9nKFwiQ2hlY2tpbmcgaW50ZXJuZXQgY29ubmVjdGl2aXR5Li4uXCIpO1xyXG4gICAgZmV0Y2goXCJodHRwczovL3RpbGUub3BlbnN0cmVldG1hcC5vcmcvMS8xLzEucG5nXCIsIHsgbWV0aG9kOiBcIkhFQURcIiB9KVxyXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHNldE9ubGluZShyZXNwb25zZS5vaykpXHJcbiAgICAgIC5jYXRjaCgoKSA9PiBzZXRPbmxpbmUoZmFsc2UpKTtcclxuICB9O1xyXG4gIC8vIEluaXRpYWxpc2llcmUgZGllIEthcnRlXHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIGlmIChtYXBSZWYuY3VycmVudCAmJiAhbWFwKSB7XHJcbiAgICAgIGluaXRpYWxNYXAgPSBMLm1hcChtYXBSZWYuY3VycmVudCwge1xyXG4gICAgICAgIGNlbnRlcjogWzUzLjExMTExMSwgOC40NjI1XSxcclxuICAgICAgICB6b29tOiAxMCxcclxuICAgICAgICBsYXllcnM6IFtcclxuICAgICAgICAgIFRBTEFTLFxyXG4gICAgICAgICAgRUNJLFxyXG4gICAgICAgICAgVUxBRixcclxuICAgICAgICAgIEdTTU1vZGVtLFxyXG4gICAgICAgICAgQ2lzY29Sb3V0ZXIsXHJcbiAgICAgICAgICBXQUdPLFxyXG4gICAgICAgICAgU2llbWVucyxcclxuICAgICAgICAgIE9URFIsXHJcbiAgICAgICAgICBXRE0sXHJcbiAgICAgICAgICBHTUEsXHJcbiAgICAgICAgICBTb25zdGlnZSxcclxuICAgICAgICAgIFRBTEFTSUNMLFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgem9vbUNvbnRyb2w6IGZhbHNlLCAvLyBEZWFrdGl2aWVyZSBkaWUgU3RhbmRhcmQtWm9vbXN0ZXVlcnVuZ1xyXG4gICAgICAgIGNvbnRleHRtZW51OiB0cnVlLFxyXG4gICAgICAgIGNvbnRleHRtZW51SXRlbXM6IFtcclxuICAgICAgICAgIHsgdGV4dDogXCJTdGF0aW9uIGhpbnp1ZsO8Z2VuXCIsIGNhbGxiYWNrOiBzaG93QWRkU3RhdGlvblBvcHVwIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHRleHQ6IFwiU3RhdGlvbiDDtmZmbmVuIChUYWIpXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiaW1nL3NjcmVlbl9uZXcucG5nXCIsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrOiBuZXdMaW5rLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdGV4dDogXCJTdGF0aW9uIMO2ZmZuZW5cIixcclxuICAgICAgICAgICAgaWNvbjogXCJpbWcvc2NyZWVuX3NhbWUucG5nXCIsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrOiBzYW1lTGluayxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHRleHQ6IFwiS29vcmRpbmF0ZW5cIixcclxuICAgICAgICAgICAgaWNvbjogXCJpbWcvc2NyZWVuX3NhbWUucG5nXCIsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrOiBsYXRhLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiLVwiLCAvLyBEaXZpZGVyXHJcbiAgICAgICAgICB7IHRleHQ6IFwiUmVpbnpvb21lblwiLCBjYWxsYmFjazogem9vbUluIH0sXHJcbiAgICAgICAgICB7IHRleHQ6IFwiUmF1c3pvb21lblwiLCBjYWxsYmFjazogem9vbU91dCB9LFxyXG4gICAgICAgICAgeyB0ZXh0OiBcIkhpZXIgemVudHJpZXJlblwiLCBjYWxsYmFjazogY2VudGVySGVyZSB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgIH0pO1xyXG4gICAgICBMLnRpbGVMYXllcihvbmxpbmUgPyBvbmxpbmVUaWxlTGF5ZXIgOiBvZmZsaW5lVGlsZUxheWVyLCB7XHJcbiAgICAgICAgYXR0cmlidXRpb246XHJcbiAgICAgICAgICAnJmNvcHk7IDxhIGhyZWY9XCJodHRwczovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHRcIj5PcGVuU3RyZWV0TWFwPC9hPiBjb250cmlidXRvcnMnLFxyXG4gICAgICB9KS5hZGRUbyhpbml0aWFsTWFwKTtcclxuXHJcbiAgICAgIHNldE1hcChpbml0aWFsTWFwKTtcclxuICAgIH1cclxuICB9LCBbbWFwUmVmLCBtYXBdKTtcclxuXHJcbiAgLy8gSGFuZGxlIG9ubGluZS9vZmZsaW5lIHN0YXR1c1xyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCBjaGVja0ludGVybmV0KTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCBjaGVja0ludGVybmV0KTtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwib25saW5lXCIsIGNoZWNrSW50ZXJuZXQpO1xyXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgY2hlY2tJbnRlcm5ldCk7XHJcbiAgICB9O1xyXG4gIH0sIFtdKTtcclxuXHJcbiAgLy8gVXBkYXRlIG1hcCBsYXllcnMgYmFzZWQgb24gb25saW5lIHN0YXR1c1xyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBpZiAobWFwKSB7XHJcbiAgICAgIGNvbnN0IG5ld0xheWVyID0gTC50aWxlTGF5ZXIoXHJcbiAgICAgICAgb25saW5lID8gb25saW5lVGlsZUxheWVyIDogb2ZmbGluZVRpbGVMYXllcixcclxuICAgICAgICB7XHJcbiAgICAgICAgICBtaW5ab29tOiA3LFxyXG4gICAgICAgICAgbWF4Wm9vbTogb25saW5lID8gMTkgOiAxNCxcclxuICAgICAgICAgIGF0dHJpYnV0aW9uOlxyXG4gICAgICAgICAgICAnTWFwIGRhdGEgwqkgPGEgaHJlZj1cImh0dHBzOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodFwiPk9wZW5TdHJlZXRNYXA8L2E+IGNvbnRyaWJ1dG9ycycsXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgbWFwLmVhY2hMYXllcigobGF5ZXIpID0+IHtcclxuICAgICAgICBpZiAobGF5ZXIgaW5zdGFuY2VvZiBMLlRpbGVMYXllcikge1xyXG4gICAgICAgICAgbWFwLnJlbW92ZUxheWVyKGxheWVyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgbmV3TGF5ZXIuYWRkVG8obWFwKTtcclxuICAgIH1cclxuICB9LCBbb25saW5lLCBtYXBdKTtcclxuXHJcbiAgLy8gTWFya2VyIGhhbmRsaW5nXHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIC8vIFJlbW92ZSBvbGQgbWFya2Vyc1xyXG4gICAgaWYgKG1hcCkge1xyXG4gICAgICBtYXAuZWFjaExheWVyKChsYXllcikgPT4ge1xyXG4gICAgICAgIGlmIChsYXllciBpbnN0YW5jZW9mIEwuTWFya2VyKSB7XHJcbiAgICAgICAgICBtYXAucmVtb3ZlTGF5ZXIobGF5ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLyBBZGQgbmV3IG1hcmtlcnNcclxuICAgICAgbG9jYXRpb25zLmZvckVhY2goKGxvY2F0aW9uKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBsYXRpdHVkZSwgbG9uZ2l0dWRlIH0gPSBwYXJzZVBvaW50KGxvY2F0aW9uLnBvc2l0aW9uKTtcclxuICAgICAgICBjb25zdCBtYXJrZXIgPSBMLm1hcmtlcihbbGF0aXR1ZGUsIGxvbmdpdHVkZV0sIHtcclxuICAgICAgICAgIGljb246IEwuaWNvbih7XHJcbiAgICAgICAgICAgIGljb25Vcmw6IFwiL2xvY2F0aW9uLnN2Z1wiLFxyXG4gICAgICAgICAgICBpY29uU2l6ZTogWzM0LCAzNF0sXHJcbiAgICAgICAgICAgIGljb25BbmNob3I6IFsxNywgMzRdLFxyXG4gICAgICAgICAgICBwb3B1cEFuY2hvcjogWzAsIC0zNF0sXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIGRyYWdnYWJsZTogdHJ1ZSxcclxuICAgICAgICAgIGlkOiBsb2NhdGlvbi5pZFBvaSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbWFya2VyLmJpbmRQb3B1cChcclxuICAgICAgICAgIGA8Yj4ke2xvY2F0aW9uLmRlc2NyaXB0aW9uIHx8IFwiVW5iZWthbm50XCJ9PC9iPjxicj5UeXBlOiAke2xvY2F0aW9uLmlkUG9pVHlwIHx8IFwiTi9BXCJ9PGJyPkxhdDogJHtsYXRpdHVkZS50b0ZpeGVkKDUpfSwgTG5nOiAke2xvbmdpdHVkZS50b0ZpeGVkKDUpfWBcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBtYXJrZXIub24oXCJkcmFnZW5kXCIsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICBjb25zdCBuZXdMYXQgPSBlLnRhcmdldC5nZXRMYXRMbmcoKS5sYXQ7XHJcbiAgICAgICAgICBjb25zdCBuZXdMbmcgPSBlLnRhcmdldC5nZXRMYXRMbmcoKS5sbmc7XHJcbiAgICAgICAgICBjb25zdCBtYXJrZXJJZCA9IGUudGFyZ2V0Lm9wdGlvbnMuaWQ7XHJcbiAgICAgICAgICB1cGRhdGVMb2NhdGlvbkluRGF0YWJhc2UobWFya2VySWQsIG5ld0xhdCwgbmV3TG5nKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgb25Mb2NhdGlvblVwZGF0ZShtYXJrZXJJZCwgbmV3TGF0LCBuZXdMbmcpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIG1hcmtlci5hZGRUbyhtYXApO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9LCBbbWFwLCBsb2NhdGlvbnMsIG9uTG9jYXRpb25VcGRhdGVdKTtcclxuXHJcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBmdW5jdGlvbiBwYXJzZVBvaW50KHBvaW50U3RyaW5nKSB7XHJcbiAgICBjb25zdCBtYXRjaCA9IHBvaW50U3RyaW5nLm1hdGNoKFxyXG4gICAgICAvUE9JTlRcXHMqXFwoKFxcZCsoXFwuXFxkKyk/KVxccysoXFxkKyhcXC5cXGQrKT8pXFwpL1xyXG4gICAgKTtcclxuICAgIGlmIChtYXRjaCkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGxvbmdpdHVkZTogcGFyc2VGbG9hdChtYXRjaFsxXSksXHJcbiAgICAgICAgbGF0aXR1ZGU6IHBhcnNlRmxvYXQobWF0Y2hbM10pLCAvLyBBY2h0dW5nOiBJbmRleCAzIGbDvHIgZGllIHp3ZWl0ZSBLb29yZGluYXRlLCB3ZWdlbiBkZXIgR3J1cHBlIChcXC5cXGQrKT9cclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEhhbmRsZSB0aGUgZXJyb3Igb3IgcmV0dXJuIGEgZGVmYXVsdC9mYWxsYmFjayB2YWx1ZVxyXG4gICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBQT0lOVCBmb3JtYXQ6XCIsIHBvaW50U3RyaW5nKTtcclxuICAgICAgcmV0dXJuIG51bGw7IC8vIE9kZXIgZWluZSBzaW5udm9sbGUgU3RhbmRhcmRhbnR3b3J0XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vLS0tLS1Lb250ZXh0bWVudS0tLS0tLS0tLS0tLS0tLS1cclxuICBjb25zdCBuZXdMaW5rID0gKGUpID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghZS5yZWxhdGVkVGFyZ2V0IHx8ICFlLnJlbGF0ZWRUYXJnZXQub3B0aW9ucykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlbGF0ZWRUYXJnZXQgb3Igb3B0aW9ucyBub3QgZGVmaW5lZFwiKTtcclxuICAgICAgfVxyXG4gICAgICBhbGVydChcIk5ldWVzIEZlbnN0ZXI6IFwiICsgZS5yZWxhdGVkVGFyZ2V0Lm9wdGlvbnMudGVzdCk7XHJcbiAgICAgIHdpbmRvd1xyXG4gICAgICAgIC5vcGVuKGAuLi9kZXZpY2VzLyR7ZS5yZWxhdGVkVGFyZ2V0Lm9wdGlvbnMudGVzdH1gLCBcIl9ibGFua1wiKVxyXG4gICAgICAgIC5mb2N1cygpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCBpbiBuZXdMaW5rIGZ1bmN0aW9uOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3Qgc2FtZUxpbmsgPSAoZSkgPT4ge1xyXG4gICAgYWxlcnQoZS5yZWxhdGVkVGFyZ2V0Lm9wdGlvbnMudGVzdCk7XHJcbiAgICB3aW5kb3dcclxuICAgICAgLm9wZW4oXCIuLi9kZXZpY2VzL1wiICsgZS5yZWxhdGVkVGFyZ2V0Lm9wdGlvbnMudGVzdCwgXCJfcGFyZW50XCIpXHJcbiAgICAgIC5mb2N1cygpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGxhdGEgPSAoZSkgPT4ge1xyXG4gICAgYWxlcnQoXCJCcmVpdGVuZ3JhZDogXCIgKyBlLmxhdGxuZy5sYXQpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IHpvb21JbiA9IChlKSA9PiB7XHJcbiAgICBpbml0aWFsTWFwLmZseVRvKGUubGF0bG5nLCAxMik7XHJcbiAgfTtcclxuXHJcbiAgY29uc3Qgem9vbU91dCA9IChlKSA9PiB7XHJcbiAgICBmbHkoKTtcclxuICB9O1xyXG4gIGNvbnN0IGNlbnRlckhlcmUgPSAoZSkgPT4ge1xyXG4gICAgaW5pdGlhbE1hcC5wYW5UbyhlLmxhdGxuZyk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3Qgc2hvd0Nvb3JkaW5hdGVzID0gKGUpID0+IHtcclxuICAgIGFsZXJ0KFwiQnJlaXRlbmdyYWQ6IFwiICsgZS5sYXRsbmcubGF0ICsgXCJcXG5Mw6RuZ2VuZ3JhZDogXCIgKyBlLmxhdGxuZy5sbmcpO1xyXG4gIH07XHJcbiAgY29uc3Qgc2hvd0RhdGEgPSAoZSkgPT4ge1xyXG4gICAgY29uc29sZS5sb2coZSk7XHJcbiAgfTtcclxuICBjb25zdCBzaG93VGFsYXMgPSAoZSkgPT4ge1xyXG4gICAgbWFwLmFkZExheWVyKFRBTEFTKTtcclxuICAgIGxvYWREYXRhKCk7XHJcbiAgfTtcclxuICBjb25zdCBoaWRlVGFsYXMgPSAoZSkgPT4ge1xyXG4gICAgbWFwLnJlbW92ZUxheWVyKFRBTEFTKTtcclxuICAgIGxvYWREYXRhKCk7XHJcbiAgfTtcclxuICBjb25zdCBzaG93R1NNID0gKGUpID0+IHtcclxuICAgIG1hcC5hZGRMYXllcihHTUEpO1xyXG4gICAgbG9hZERhdGEoKTtcclxuICB9O1xyXG4gIGNvbnN0IGhpZGVHU00gPSAoZSkgPT4ge1xyXG4gICAgbWFwLnJlbW92ZUxheWVyKEdNQSk7XHJcbiAgICBsb2FkRGF0YSgpO1xyXG4gIH07XHJcbiAgLy8tLS0tLUtvbnRleHRtZW51LS0tLWVuZGUtLS0tLS0tLS0tLS1cclxuICAvLyBFbnN1cmUgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCB3aGVuIG1hcCBpcyBpbml0aWFsaXplZCBhbmQgYXZhaWxhYmxlXHJcbiAgY29uc3Qgc2hvd0FkZFN0YXRpb25Qb3B1cCA9IChlKSA9PiB7XHJcbiAgICBpZiAoIWluaXRpYWxNYXApIHtcclxuICAgICAgY29uc29sZS5sb2coXCJNYXAgaXMgbm90IGluaXRpYWxpemVkLlwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBvcHVwQ29udGVudCA9IEwuRG9tVXRpbC5jcmVhdGUoXCJkaXZcIik7XHJcbiAgICBwb3B1cENvbnRlbnQuaW5uZXJIVE1MID0gYFxyXG4gIDxmb3JtIGlkPVwiYWRkU3RhdGlvbkZvcm1cIiBjbGFzcz1cIm0tMCBwLTIgdy1mdWxsXCI+XHJcbiAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIG1iLTRcIj4gICAgICBcclxuICAgIDxsYWJlbCBmb3I9XCJuYW1lXCIgY2xhc3M9XCJibG9jayBtci0yIGZsZXgtbm9uZVwiPk5hbWU6PC9sYWJlbD5cclxuICAgIDxpbnB1dFxyXG4gICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgIGlkPVwibmFtZVwiXHJcbiAgICAgIG5hbWU9XCJuYW1lXCJcclxuICAgICAgcGxhY2Vob2xkZXI9XCJOYW1lIGRlciBTdGF0aW9uXCJcclxuICAgICAgY2xhc3M9XCJibG9jayBwLTIgZmxleC1ncm93IGJvcmRlci0yIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkLW1kIHRleHQtc21cIlxyXG4gICAgLz5cclxuICA8L2Rpdj5cclxuICBcclxuICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgbWItNFwiPiAgIFxyXG4gICAgPGxhYmVsIGZvcj1cInR5cGVcIiBjbGFzcz1cImJsb2NrIG1yLTMgZmxleC1ub25lXCI+VHlwZTo8L2xhYmVsPlxyXG4gICAgPGlucHV0XHJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgaWQ9XCJ0eXBlXCJcclxuICAgICAgbmFtZT1cInR5cGVcIlxyXG4gICAgICBwbGFjZWhvbGRlcj1cIlR5cCBkZXIgU3RhdGlvblwiXHJcbiAgICAgIGNsYXNzPVwiYmxvY2sgcC0yIGZsZXgtZ3JvdyBib3JkZXItMiBib3JkZXItZ3JheS0yMDAgcm91bmRlZC1tZCB0ZXh0LXNtXCJcclxuICAgIC8+XHJcbiAgPC9kaXY+XHJcbiAgXHJcbiAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIG1iLTRcIj5cclxuICAgIDxsYWJlbCBmb3I9XCJsYXRcIiBjbGFzcz1cImJsb2NrIG1yLTIgZmxleC1ub25lXCI+QnJlaXRlbmdyYWQ6PC9sYWJlbD5cclxuICAgIDxpbnB1dFxyXG4gICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgIGlkPVwibGF0XCJcclxuICAgICAgbmFtZT1cImxhdFwiXHJcbiAgICAgIHZhbHVlPVwiJHtlLmxhdGxuZy5sYXQudG9GaXhlZCg1KX1cIlxyXG4gICAgICByZWFkb25seVxyXG4gICAgICBjbGFzcz1cImJsb2NrIHAtMiBmbGV4LWdyb3cgYm9yZGVyLTIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtbWQgdGV4dC1zbVwiXHJcbiAgICAvPlxyXG4gIDwvZGl2PlxyXG4gICBcclxuICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgbWItNFwiPiAgIFxyXG4gICAgPGxhYmVsIGZvcj1cImxuZ1wiIGNsYXNzPVwiYmxvY2sgbXItMiBmbGV4LW5vbmVcIj5Mw6RuZ2VuZ3JhZDo8L2xhYmVsPlxyXG4gICAgPGlucHV0XHJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgaWQ9XCJsbmdcIlxyXG4gICAgICBuYW1lPVwibG5nXCJcclxuICAgICAgdmFsdWU9XCIke2UubGF0bG5nLmxuZy50b0ZpeGVkKDUpfVwiXHJcbiAgICAgIHJlYWRvbmx5XHJcbiAgICAgIGNsYXNzPVwiYmxvY2sgcC0yIGZsZXgtZ3JvdyBib3JkZXItMiBib3JkZXItZ3JheS0yMDAgcm91bmRlZC1tZCB0ZXh0LXNtXCJcclxuICAgIC8+XHJcbiAgPC9kaXY+XHJcbiAgXHJcbiAgPGJ1dHRvblxyXG4gICAgdHlwZT1cInN1Ym1pdFwiXHJcbiAgICBjbGFzcz1cImJnLWJsdWUtNTAwIGhvdmVyOmJnLWJsdWUtNzAwIHRleHQtd2hpdGUgZm9udC1ib2xkIHB5LTIgcHgtNCByb3VuZGVkIHctZnVsbFwiXHJcbiAgPlxyXG4gICAgU3RhdGlvbiBoaW56dWbDvGdlblxyXG4gIDwvYnV0dG9uPlxyXG48L2Zvcm0+XHJcbiAgYDtcclxuXHJcbiAgICBMLnBvcHVwKCkuc2V0TGF0TG5nKGUubGF0bG5nKS5zZXRDb250ZW50KHBvcHVwQ29udGVudCkub3Blbk9uKGluaXRpYWxNYXApO1xyXG5cclxuICAgIC8vIEF0dGFjaCBldmVudCBsaXN0ZW5lciBoZXJlXHJcbiAgICBMLkRvbUV2ZW50Lm9uKHBvcHVwQ29udGVudCwgXCJzdWJtaXRcIiwgaGFuZGxlU3VibWl0KTtcclxuICB9O1xyXG5cclxuICAvKlxyXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IChldmVudCkgPT4ge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGNvbnN0IGZvcm0gPSBldmVudC50YXJnZXQ7XHJcbiAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICBuYW1lOiBmb3JtLm5hbWUudmFsdWUsXHJcbiAgICAgIHR5cGU6IGZvcm0udHlwZS52YWx1ZSxcclxuICAgICAgbGF0aXR1ZGU6IGZvcm0ubGF0LnZhbHVlLFxyXG4gICAgICBsb25naXR1ZGU6IGZvcm0ubG5nLnZhbHVlLFxyXG4gICAgfTtcclxuXHJcbiAgICBvbkFkZExvY2F0aW9uKG5hbWUsIHR5cGUsIGxhdCwgbG5nKTtcclxuICAgIGNvbnNvbGUubG9nKFwiTmFtZTogXCIsIG5hbWUsIFwiVHlwZTogXCIsIHR5cGUsIFwiTGF0OiBcIiwgbGF0LCBcIkxuZzogXCIsIGxuZyk7XHJcbiAgICBtYXAuY2xvc2VQb3B1cCgpO1xyXG4gIH07XHJcbiovXHJcbiAgLy8gRnVua3Rpb24genVtIEhpbnp1ZsO8Z2VuIGVpbmVzIG5ldWVuIFN0YW5kb3J0c1xyXG4gIGFzeW5jIGZ1bmN0aW9uIGhhbmRsZVN1Ym1pdChldmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGNvbnN0IGZvcm0gPSBldmVudC50YXJnZXQ7XHJcbiAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICBuYW1lOiBmb3JtLm5hbWUudmFsdWUsXHJcbiAgICAgIHR5cGU6IGZvcm0udHlwZS52YWx1ZSxcclxuICAgICAgbGF0aXR1ZGU6IGZvcm0ubGF0LnZhbHVlLFxyXG4gICAgICBsb25naXR1ZGU6IGZvcm0ubG5nLnZhbHVlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFwiL2FwaS9hZGRMb2NhdGlvblwiLCB7XHJcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuXHJcbiAgICAgIGlmIChyZXNwb25zZS5vaykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiU3RhbmRvcnQgaGluenVnZWbDvGd0OlwiLCByZXN1bHQpO1xyXG4gICAgICAgIGFsZXJ0KFwiU3RhbmRvcnQgZXJmb2xncmVpY2ggaGluenVnZWbDvGd0IVwiKTtcclxuICAgICAgICBmb3JtLnJlc2V0KCk7IC8vIEZvcm11bGFyIHp1csO8Y2tzZXR6ZW5cclxuICAgICAgICAvLyBIaWVyIGvDtm5udGVzdCBkdSB3ZWl0ZXJlIEFrdGlvbmVuIGR1cmNoZsO8aHJlbiwgd2llIGRhcyBTY2hsaWXDn2VuIGRlcyBQb3B1cHMgb2RlciBkYXMgQWt0dWFsaXNpZXJlbiBkZXIgTWFya2VyIGF1ZiBkZXIgS2FydGVcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICByZXN1bHQuZXJyb3IgfHwgXCJFaW4gdW5iZWthbm50ZXIgRmVobGVyIGlzdCBhdWZnZXRyZXRlbi5cIlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGZWhsZXIgYmVpbSBIaW56dWbDvGdlbiBkZXMgU3RhbmRvcnRzOlwiLCBlcnJvcik7XHJcbiAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZmx5KHN0YXRpb25WYWx1ZSkge1xyXG4gICAgdmFyIHggPSA1MS40MTMyMTQwNzg3OTE1NDtcclxuICAgIHZhciB5ID0gNy43Mzk2MTc5MjUzMDM5MzQ7XHJcbiAgICB2YXIgem9vbSA9IDc7XHJcblxyXG4gICAgLyogIGZvciAodmFyIGkgPSAwOyBpIDwgR2lzU3RhdGlvbnNTdGF0aWNEaXN0cmljdGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHZhciBnaXNTdGF0aWNzID0gR2lzU3RhdGlvbnNTdGF0aWNEaXN0cmljdFtpXTtcclxuICAgICAgaWYgKHN0YXRpb25WYWx1ZSA9PT0gZ2lzU3RhdGljcy5BcmVhX05hbWUpIHtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGdpc1N0YXRpY3MuWCtcIixcIitnaXNTdGF0aWNzLlkpO1xyXG4gICAgICAgIHggPSBnaXNTdGF0aWNzLlg7XHJcbiAgICAgICAgeSA9IGdpc1N0YXRpY3MuWTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHkgPT09IDcuNzM5NjE3OTI1MzAzOTM0KSB7XHJcbiAgICAgIHpvb20gPSA4O1xyXG4gICAgfSAqL1xyXG4gICAgaW5pdGlhbE1hcC5mbHlUbyhbeCwgeV0sIHpvb20pO1xyXG5cclxuICAgIC8qIHZhciBwb3B1cCA9IG5ldyBMLlBvcHVwKCk7XHJcbiAgICBvbXMuYWRkTGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAobWFya2VyKSB7XHJcbiAgICAgIHBvcHVwLnNldENvbnRlbnQobWFya2VyLmRlc2MpO1xyXG4gICAgICBwb3B1cC5zZXRMYXRMbmcobWFya2VyLmdldExhdExuZygpKTtcclxuICAgICAgbWFwLm9wZW5Qb3B1cChwb3B1cCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdpbmRvdy5tYXBEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHZhciBkYXR1bSA9IHdpbmRvdy5tYXBEYXRhW2ldO1xyXG4gICAgICB2YXIgbG9jID0gbmV3IEwuTGF0TG5nKGRhdHVtLmxhdCwgZGF0dW0ubG9uKTtcclxuICAgICAgdmFyIG1hcmtlciA9IG5ldyBMLk1hcmtlcihsb2MpO1xyXG4gICAgICBtYXJrZXIuZGVzYyA9IGRhdHVtLmQ7XHJcbiAgICAgIG1hcC5hZGRMYXllcihtYXJrZXIpO1xyXG4gICAgICAvL29tcy5hZGRNYXJrZXIobWFya2VyKTsgIC8vIDwtLSBoZXJlXHJcbiAgICB9ICovXHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdlxyXG4gICAgICBpZD1cIm1hcFwiXHJcbiAgICAgIHJlZj17bWFwUmVmfVxyXG4gICAgICBzdHlsZT17eyBoZWlnaHQ6IFwiMTAwdmhcIiwgd2lkdGg6IFwiMTAwdndcIiwgb3ZlcmZsb3c6IFwiaGlkZGVuXCIgfX1cclxuICAgID48L2Rpdj5cclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWFwQ29tcG9uZW50O1xyXG4iXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIkwiLCJjb25maWciLCJNYXBDb21wb25lbnQiLCJsb2NhdGlvbnMiLCJvbkxvY2F0aW9uVXBkYXRlIiwibWFwUmVmIiwibWFwIiwic2V0TWFwIiwib25saW5lIiwic2V0T25saW5lIiwibmF2aWdhdG9yIiwib25MaW5lIiwiR2lzU3RhdGlvbnNTdGF0aWNEaXN0cmljdCIsInNldEdpc1N0YXRpb25zU3RhdGljRGlzdHJpY3QiLCJkYXRhU3RhdHVzIiwic2V0RGF0YVN0YXR1cyIsImRhdGFJY29ucyIsInNldERhdGFJY29ucyIsImRhdGFTeXN0ZW0iLCJzZXREYXRhU3lzdGVtIiwibWFwR2lzU3RhdGlvbnNTdGF0aWNEaXN0cmljdFVybCIsIm1hcERhdGFTdGF0dXNVcmwiLCJtYXBEYXRhSWNvblVybCIsIm1hcERhdGFTeXN0ZW1VcmwiLCJjb25zb2xlIiwibG9nIiwiZmV0Y2hEYXRhIiwicmVzcG9uc2UiLCJmZXRjaCIsImpzb25SZXNwb25zZSIsImpzb24iLCJQb2ludHMiLCJlcnJvciIsImNoZWNrSW50ZXJuZXQiLCJyZXNwb25zZXMiLCJQcm9taXNlIiwiYWxsIiwidGhlbiIsInJlcyIsIlN0YXRpcyIsIkxpc3QiLCJTeXN0ZW1zIiwiZmlsdGVyIiwic3lzdGVtIiwiQWxsb3ciLCJvZmZsaW5lVGlsZUxheWVyIiwib25saW5lVGlsZUxheWVyIiwiVEFMQVMiLCJsYXllckdyb3VwIiwiRUNJIiwiVUxBRiIsIkdTTU1vZGVtIiwiQ2lzY29Sb3V0ZXIiLCJXQUdPIiwiU2llbWVucyIsIk9URFIiLCJXRE0iLCJHTUEiLCJTb25zdGlnZSIsIlRBTEFTSUNMIiwiaW5pdGlhbE1hcCIsInNlcnZlclVSTCIsIndpbmRvd0hlaWdodCIsIm1ldGhvZCIsIm9rIiwiY2F0Y2giLCJjdXJyZW50IiwiY2VudGVyIiwiem9vbSIsImxheWVycyIsInpvb21Db250cm9sIiwiY29udGV4dG1lbnUiLCJjb250ZXh0bWVudUl0ZW1zIiwidGV4dCIsImNhbGxiYWNrIiwic2hvd0FkZFN0YXRpb25Qb3B1cCIsImljb24iLCJuZXdMaW5rIiwic2FtZUxpbmsiLCJsYXRhIiwiem9vbUluIiwiem9vbU91dCIsImNlbnRlckhlcmUiLCJ0aWxlTGF5ZXIiLCJhdHRyaWJ1dGlvbiIsImFkZFRvIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJuZXdMYXllciIsIm1pblpvb20iLCJtYXhab29tIiwiZWFjaExheWVyIiwibGF5ZXIiLCJUaWxlTGF5ZXIiLCJyZW1vdmVMYXllciIsIk1hcmtlciIsImZvckVhY2giLCJsb2NhdGlvbiIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwicGFyc2VQb2ludCIsInBvc2l0aW9uIiwibWFya2VyIiwiaWNvblVybCIsImljb25TaXplIiwiaWNvbkFuY2hvciIsInBvcHVwQW5jaG9yIiwiZHJhZ2dhYmxlIiwiaWQiLCJpZFBvaSIsImJpbmRQb3B1cCIsImRlc2NyaXB0aW9uIiwiaWRQb2lUeXAiLCJ0b0ZpeGVkIiwib24iLCJlIiwibmV3TGF0IiwidGFyZ2V0IiwiZ2V0TGF0TG5nIiwibGF0IiwibmV3TG5nIiwibG5nIiwibWFya2VySWQiLCJvcHRpb25zIiwidXBkYXRlTG9jYXRpb25JbkRhdGFiYXNlIiwicG9pbnRTdHJpbmciLCJtYXRjaCIsInBhcnNlRmxvYXQiLCJyZWxhdGVkVGFyZ2V0IiwiRXJyb3IiLCJhbGVydCIsInRlc3QiLCJvcGVuIiwiZm9jdXMiLCJsYXRsbmciLCJmbHlUbyIsImZseSIsInBhblRvIiwic2hvd0Nvb3JkaW5hdGVzIiwic2hvd0RhdGEiLCJzaG93VGFsYXMiLCJhZGRMYXllciIsImxvYWREYXRhIiwiaGlkZVRhbGFzIiwic2hvd0dTTSIsImhpZGVHU00iLCJwb3B1cENvbnRlbnQiLCJEb21VdGlsIiwiY3JlYXRlIiwiaW5uZXJIVE1MIiwicG9wdXAiLCJzZXRMYXRMbmciLCJzZXRDb250ZW50Iiwib3Blbk9uIiwiRG9tRXZlbnQiLCJoYW5kbGVTdWJtaXQiLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwiZm9ybSIsImRhdGEiLCJuYW1lIiwidmFsdWUiLCJ0eXBlIiwiaGVhZGVycyIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwicmVzdWx0IiwicmVzZXQiLCJtZXNzYWdlIiwic3RhdGlvblZhbHVlIiwieCIsInkiLCJkaXYiLCJyZWYiLCJzdHlsZSIsImhlaWdodCIsIndpZHRoIiwib3ZlcmZsb3ciXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/MapComponent.js\n");
/***/ }),
/***/ "./config/config.js":
/*!**************************!*\
!*** ./config/config.js ***!
\**************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ c: () => (/* binding */ c),\n/* harmony export */ fullSideMenu: () => (/* binding */ fullSideMenu),\n/* harmony export */ mapDataIconUrl: () => (/* binding */ mapDataIconUrl),\n/* harmony export */ mapDataMeasures: () => (/* binding */ mapDataMeasures),\n/* harmony export */ mapDataStatusUrl: () => (/* binding */ mapDataStatusUrl),\n/* harmony export */ mapDataSystemUrl: () => (/* binding */ mapDataSystemUrl),\n/* harmony export */ mapGisStationsStaticDistrictUrl: () => (/* binding */ mapGisStationsStaticDistrictUrl),\n/* harmony export */ mapIconsOfflineURL: () => (/* binding */ mapIconsOfflineURL),\n/* harmony export */ mapMeasuresOfflineURL: () => (/* binding */ mapMeasuresOfflineURL),\n/* harmony export */ mapStaticOfflineURL: () => (/* binding */ mapStaticOfflineURL),\n/* harmony export */ mapStatusOfflineURL: () => (/* binding */ mapStatusOfflineURL),\n/* harmony export */ mapSystemOfflineURL: () => (/* binding */ mapSystemOfflineURL),\n/* harmony export */ mapVersion: () => (/* binding */ mapVersion),\n/* harmony export */ offlineData: () => (/* binding */ offlineData),\n/* harmony export */ serverURL: () => (/* binding */ serverURL),\n/* harmony export */ standardSideMenu: () => (/* binding */ standardSideMenu),\n/* harmony export */ url: () => (/* binding */ url),\n/* harmony export */ url_string: () => (/* binding */ url_string),\n/* harmony export */ user: () => (/* binding */ user),\n/* harmony export */ windowHeight: () => (/* binding */ windowHeight)\n/* harmony export */ });\n// Definieren der grundlegenden Umgebungseinstellungen und Konfigurationen der Karte\nconst mapVersion = \"0.5.3\"; // Die Version der verwendeten Karte\nconst standardSideMenu = true; // Einstellung, ob ein standardmäßiges Seitenmenü verwendet wird\nconst fullSideMenu = false; // Einstellung, ob ein vollständiges Seitenmenü verwendet wird\nconst offlineData = false; // Schalter, um anzugeben, ob Daten offline verfügbar gemacht werden sollen\nconst serverURL = \"/api\"; // Die Basis-URL des Servers, von dem Daten bezogen werden\n// Initialisieren von Variablen, die später im Browserkontext gesetzt werden\nlet windowHeight, url_string, url, c, user;\nlet mapGisStationsStaticDistrictUrl, mapDataStatusUrl, mapDataMeasures, mapDataIconUrl, mapDataSystemUrl;\nlet mapStaticOfflineURL, mapStatusOfflineURL, mapSystemOfflineURL, mapIconsOfflineURL, mapMeasuresOfflineURL;\n// Prüfen, ob das Code im Browser ausgeführt wird\nif (false) {}\n// Export der definierten Variablen und URLs, damit sie in anderen Teilen der Anwendung verwendet werden können\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb25maWcvY29uZmlnLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0ZBQW9GO0FBQ3BGLE1BQU1BLGFBQWEsU0FBUyxvQ0FBb0M7QUFDaEUsTUFBTUMsbUJBQW1CLE1BQU0sZ0VBQWdFO0FBQy9GLE1BQU1DLGVBQWUsT0FBTyw4REFBOEQ7QUFDMUYsTUFBTUMsY0FBYyxPQUFPLDJFQUEyRTtBQUN0RyxNQUFNQyxZQUFZLFFBQVEsMERBQTBEO0FBRXBGLDRFQUE0RTtBQUM1RSxJQUFJQyxjQUFjQyxZQUFZQyxLQUFLQyxHQUFHQztBQUN0QyxJQUFJQyxpQ0FDRkMsa0JBQ0FDLGlCQUNBQyxnQkFDQUM7QUFDRixJQUFJQyxxQkFDRkMscUJBQ0FDLHFCQUNBQyxvQkFDQUM7QUFFRixpREFBaUQ7QUFDakQsSUFBSSxLQUE2QixFQUFFLEVBMEJsQztBQUVELCtHQUErRztBQXNCN0ciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jb25maWcvY29uZmlnLmpzP2FhMDQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gRGVmaW5pZXJlbiBkZXIgZ3J1bmRsZWdlbmRlbiBVbWdlYnVuZ3NlaW5zdGVsbHVuZ2VuIHVuZCBLb25maWd1cmF0aW9uZW4gZGVyIEthcnRlXHJcbmNvbnN0IG1hcFZlcnNpb24gPSBcIjAuNS4zXCI7IC8vIERpZSBWZXJzaW9uIGRlciB2ZXJ3ZW5kZXRlbiBLYXJ0ZVxyXG5jb25zdCBzdGFuZGFyZFNpZGVNZW51ID0gdHJ1ZTsgLy8gRWluc3RlbGx1bmcsIG9iIGVpbiBzdGFuZGFyZG3DpMOfaWdlcyBTZWl0ZW5tZW7DvCB2ZXJ3ZW5kZXQgd2lyZFxyXG5jb25zdCBmdWxsU2lkZU1lbnUgPSBmYWxzZTsgLy8gRWluc3RlbGx1bmcsIG9iIGVpbiB2b2xsc3TDpG5kaWdlcyBTZWl0ZW5tZW7DvCB2ZXJ3ZW5kZXQgd2lyZFxyXG5jb25zdCBvZmZsaW5lRGF0YSA9IGZhbHNlOyAvLyBTY2hhbHRlciwgdW0gYW56dWdlYmVuLCBvYiBEYXRlbiBvZmZsaW5lIHZlcmbDvGdiYXIgZ2VtYWNodCB3ZXJkZW4gc29sbGVuXHJcbmNvbnN0IHNlcnZlclVSTCA9IFwiL2FwaVwiOyAvLyBEaWUgQmFzaXMtVVJMIGRlcyBTZXJ2ZXJzLCB2b24gZGVtIERhdGVuIGJlem9nZW4gd2VyZGVuXHJcblxyXG4vLyBJbml0aWFsaXNpZXJlbiB2b24gVmFyaWFibGVuLCBkaWUgc3DDpHRlciBpbSBCcm93c2Vya29udGV4dCBnZXNldHp0IHdlcmRlblxyXG5sZXQgd2luZG93SGVpZ2h0LCB1cmxfc3RyaW5nLCB1cmwsIGMsIHVzZXI7XHJcbmxldCBtYXBHaXNTdGF0aW9uc1N0YXRpY0Rpc3RyaWN0VXJsLFxyXG4gIG1hcERhdGFTdGF0dXNVcmwsXHJcbiAgbWFwRGF0YU1lYXN1cmVzLFxyXG4gIG1hcERhdGFJY29uVXJsLFxyXG4gIG1hcERhdGFTeXN0ZW1Vcmw7XHJcbmxldCBtYXBTdGF0aWNPZmZsaW5lVVJMLFxyXG4gIG1hcFN0YXR1c09mZmxpbmVVUkwsXHJcbiAgbWFwU3lzdGVtT2ZmbGluZVVSTCxcclxuICBtYXBJY29uc09mZmxpbmVVUkwsXHJcbiAgbWFwTWVhc3VyZXNPZmZsaW5lVVJMO1xyXG5cclxuLy8gUHLDvGZlbiwgb2IgZGFzIENvZGUgaW0gQnJvd3NlciBhdXNnZWbDvGhydCB3aXJkXHJcbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgLy8gRGllc2UgVmFyaWFibGVuIHdlcmRlbiBudXIgaW0gQnJvd3Nlci1Lb250ZXh0IGluaXRpYWxpc2llcnRcclxuICB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7IC8vIERpZSBIw7ZoZSBkZXMgQnJvd3NlcmZlbnN0ZXJzXHJcbiAgdXJsX3N0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOyAvLyBEaWUgdm9sbHN0w6RuZGlnZSBVUkwgYWxzIFN0cmluZ1xyXG4gIHVybCA9IG5ldyBVUkwodXJsX3N0cmluZyk7IC8vIERpZSBVUkwgYWxzIFVSTC1PYmpla3QsIHVtIFRlaWxlIGRlciBVUkwgZWluZmFjaGVyIHp1IGhhbmRoYWJlblxyXG4gIGMgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChcIm1cIikgfHwgXCIxMFwiOyAvLyBFaW4gUGFyYW1ldGVyIGF1cyBkZXIgVVJMLCBTdGFuZGFyZHdlcnQgaXN0ICcxMCdcclxuICB1c2VyID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJ1XCIpIHx8IFwiNDg1XCI7IC8vIEVpbiB3ZWl0ZXJlciBQYXJhbWV0ZXIgYXVzIGRlciBVUkwsIFN0YW5kYXJkd2VydCBpc3QgJzQ4NyBvZGVyIDQ4NCBvZGVyIDQ4NSdcclxuXHJcbiAgLy8gS29uc3RydWt0aW9uIHZvbiBVUkxzLCBkaWUgYXVmIHNwZXppZmlzY2hlIFJlc3NvdXJjZW4gYXVmIGRlbSBTZXJ2ZXIgemVpZ2VuXHJcbiAgbWFwR2lzU3RhdGlvbnNTdGF0aWNEaXN0cmljdFVybCA9IGAke3NlcnZlclVSTH0vdGFsYXM1L0NsaWVudERhdGEvV2Vic2VydmljZU1hcC5hc214L0dpc1N0YXRpb25zU3RhdGljRGlzdHJpY3Q/aWRNYXA9JHtjfSZpZFVzZXI9JHt1c2VyfWA7XHJcbiAgbWFwRGF0YVN0YXR1c1VybCA9IGAke3NlcnZlclVSTH0vdGFsYXM1L0NsaWVudERhdGEvV2Vic2VydmljZU1hcC5hc214L0dpc1N0YXRpb25zU3RhdHVzRGlzdHJpY3Q/aWRNYXA9JHtjfSZpZFVzZXI9JHt1c2VyfWA7XHJcbiAgbWFwRGF0YU1lYXN1cmVzID0gYCR7c2VydmVyVVJMfS90YWxhczUvQ2xpZW50RGF0YS9XZWJzZXJ2aWNlTWFwLmFzbXgvR2lzU3RhdGlvbnNNZWFzdXJlbWVudHM/aWRNYXA9JHtjfWA7XHJcbiAgbWFwRGF0YUljb25VcmwgPSBgJHtzZXJ2ZXJVUkx9L3RhbGFzNS9DbGllbnREYXRhL1dlYnNlcnZpY2VNYXAuYXNteC9HZXRJY29uc1N0YXRpY2A7XHJcbiAgbWFwRGF0YVN5c3RlbVVybCA9IGAke3NlcnZlclVSTH0vdGFsYXM1L0NsaWVudERhdGEvV2Vic2VydmljZU1hcC5hc214L0dpc1N5c3RlbVN0YXRpYz9pZE1hcD0ke2N9JmlkVXNlcj0ke3VzZXJ9YDtcclxuXHJcbiAgLyogICBtYXBHaXNTdGF0aW9uc1N0YXRpY0Rpc3RyaWN0VXJsID0gYCR7c2VydmVyVVJMfS90YWxhczUvQ2xpZW50RGF0YS9XZWJzZXJ2aWNlTWFwLmFzbXgvR2lzU3RhdGlvbnNTdGF0aWNEaXN0cmljdGA7XHJcbiAgbWFwRGF0YVN0YXR1c1VybCA9IGAke3NlcnZlclVSTH0vdGFsYXM1L0NsaWVudERhdGEvV2Vic2VydmljZU1hcC5hc214L0dpc1N0YXRpb25zU3RhdHVzRGlzdHJpY3RgO1xyXG4gIG1hcERhdGFNZWFzdXJlcyA9IGAke3NlcnZlclVSTH0vdGFsYXM1L0NsaWVudERhdGEvV2Vic2VydmljZU1hcC5hc214L0dpc1N0YXRpb25zTWVhc3VyZW1lbnRzYDtcclxuICBtYXBEYXRhSWNvblVybCA9IGAke3NlcnZlclVSTH0vdGFsYXM1L0NsaWVudERhdGEvV2Vic2VydmljZU1hcC5hc214L0dldEljb25zU3RhdGljYDtcclxuICBtYXBEYXRhU3lzdGVtVXJsID0gYCR7c2VydmVyVVJMfS90YWxhczUvQ2xpZW50RGF0YS9XZWJzZXJ2aWNlTWFwLmFzbXgvR2lzU3lzdGVtU3RhdGljYDsgKi9cclxuICAvLyBVUkxzIHp1IE9mZmxpbmUtRGF0ZW4sIGZhbGxzIGJlbsO2dGlndFxyXG4gIG1hcFN0YXRpY09mZmxpbmVVUkwgPSBgb2ZmbGluZVRlc3REYXRhL2lkTWFwJHtjfUdpc1N0YXRpb25lblN0YXRpYy5qc29uYDtcclxuICBtYXBTdGF0dXNPZmZsaW5lVVJMID0gYG9mZmxpbmVUZXN0RGF0YS9pZE1hcCR7Y31HaXNTdGF0aW9uZW5TdGF0dXMuanNvbmA7XHJcbiAgbWFwU3lzdGVtT2ZmbGluZVVSTCA9IGBvZmZsaW5lVGVzdERhdGEvaWRNYXAke2N9R2lzU3lzdGVtU3RhdGljLmpzb25gO1xyXG4gIG1hcEljb25zT2ZmbGluZVVSTCA9IFwib2ZmbGluZVRlc3REYXRhL2ljb25zLmpzb25cIjtcclxuICBtYXBNZWFzdXJlc09mZmxpbmVVUkwgPSBgb2ZmbGluZVRlc3REYXRhL2lkTWFwJHtjfUdpc1N5c3RlbU1lYXN1cmVzLmpzb25gO1xyXG59XHJcblxyXG4vLyBFeHBvcnQgZGVyIGRlZmluaWVydGVuIFZhcmlhYmxlbiB1bmQgVVJMcywgZGFtaXQgc2llIGluIGFuZGVyZW4gVGVpbGVuIGRlciBBbndlbmR1bmcgdmVyd2VuZGV0IHdlcmRlbiBrw7ZubmVuXHJcbmV4cG9ydCB7XHJcbiAgbWFwVmVyc2lvbixcclxuICBzdGFuZGFyZFNpZGVNZW51LFxyXG4gIGZ1bGxTaWRlTWVudSxcclxuICBvZmZsaW5lRGF0YSxcclxuICBzZXJ2ZXJVUkwsXHJcbiAgd2luZG93SGVpZ2h0LFxyXG4gIHVybF9zdHJpbmcsXHJcbiAgdXJsLFxyXG4gIGMsXHJcbiAgdXNlcixcclxuICBtYXBHaXNTdGF0aW9uc1N0YXRpY0Rpc3RyaWN0VXJsLFxyXG4gIG1hcERhdGFTdGF0dXNVcmwsXHJcbiAgbWFwRGF0YU1lYXN1cmVzLFxyXG4gIG1hcERhdGFJY29uVXJsLFxyXG4gIG1hcERhdGFTeXN0ZW1VcmwsXHJcbiAgbWFwU3RhdGljT2ZmbGluZVVSTCxcclxuICBtYXBTdGF0dXNPZmZsaW5lVVJMLFxyXG4gIG1hcFN5c3RlbU9mZmxpbmVVUkwsXHJcbiAgbWFwSWNvbnNPZmZsaW5lVVJMLFxyXG4gIG1hcE1lYXN1cmVzT2ZmbGluZVVSTCxcclxufTtcclxuIl0sIm5hbWVzIjpbIm1hcFZlcnNpb24iLCJzdGFuZGFyZFNpZGVNZW51IiwiZnVsbFNpZGVNZW51Iiwib2ZmbGluZURhdGEiLCJzZXJ2ZXJVUkwiLCJ3aW5kb3dIZWlnaHQiLCJ1cmxfc3RyaW5nIiwidXJsIiwiYyIsInVzZXIiLCJtYXBHaXNTdGF0aW9uc1N0YXRpY0Rpc3RyaWN0VXJsIiwibWFwRGF0YVN0YXR1c1VybCIsIm1hcERhdGFNZWFzdXJlcyIsIm1hcERhdGFJY29uVXJsIiwibWFwRGF0YVN5c3RlbVVybCIsIm1hcFN0YXRpY09mZmxpbmVVUkwiLCJtYXBTdGF0dXNPZmZsaW5lVVJMIiwibWFwU3lzdGVtT2ZmbGluZVVSTCIsIm1hcEljb25zT2ZmbGluZVVSTCIsIm1hcE1lYXN1cmVzT2ZmbGluZVVSTCIsIndpbmRvdyIsImlubmVySGVpZ2h0IiwibG9jYXRpb24iLCJocmVmIiwiVVJMIiwic2VhcmNoUGFyYW1zIiwiZ2V0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./config/config.js\n");
/***/ })
};
;