!function(Q,F){"object"==typeof exports&&"object"==typeof module?module.exports=F():"function"==typeof define&&define.amd?define([],F):"object"==typeof exports?exports.getVPAIDAd=F():Q.getVPAIDAd=F()}(self,(function(){return(()=>{"use strict";var __webpack_modules__={557:(__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": () => (/* binding */ createVidoElement)\n/* harmony export */ });\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction createVidoElement(tag, props) {\n var element = document.createElement(tag);\n Object.entries(props || {}).forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n name = _ref2[0],\n value = _ref2[1];\n\n if (name.startsWith(\'on\') && name.toLowerCase() in window) {\n element.addEventListener(name.toLowerCase().substr(2), value);\n } else {\n element.setAttribute(name, value.toString());\n }\n });\n\n for (var _len = arguments.length, children = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n children[_key - 2] = arguments[_key];\n }\n\n children.forEach(function (child) {\n appendChild(element, child);\n });\n return element;\n}\n\nvar appendChild = function appendChild(parent, child) {\n if (Array.isArray(child)) child.forEach(function (nestedChild) {\n return appendChild(parent, nestedChild);\n });else parent.appendChild(child.nodeType ? child : document.createTextNode(child));\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9zcmMvZ2xvYmFsL2NyZWF0ZVZpZG9FbGVtZW50LmpzPzg2NTMiXSwibmFtZXMiOlsiY3JlYXRlVmlkb0VsZW1lbnQiLCJ0YWciLCJwcm9wcyIsImVsZW1lbnQiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJPYmplY3QiLCJlbnRyaWVzIiwiZm9yRWFjaCIsIm5hbWUiLCJ2YWx1ZSIsInN0YXJ0c1dpdGgiLCJ0b0xvd2VyQ2FzZSIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJzdWJzdHIiLCJzZXRBdHRyaWJ1dGUiLCJ0b1N0cmluZyIsImNoaWxkcmVuIiwiY2hpbGQiLCJhcHBlbmRDaGlsZCIsInBhcmVudCIsIkFycmF5IiwiaXNBcnJheSIsIm5lc3RlZENoaWxkIiwibm9kZVR5cGUiLCJjcmVhdGVUZXh0Tm9kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFlLFNBQVNBLGlCQUFULENBQTJCQyxHQUEzQixFQUFnQ0MsS0FBaEMsRUFBbUQ7QUFDakUsTUFBTUMsT0FBTyxHQUFHQyxRQUFRLENBQUNDLGFBQVQsQ0FBdUJKLEdBQXZCLENBQWhCO0FBRUFLLFFBQU0sQ0FBQ0MsT0FBUCxDQUFlTCxLQUFLLElBQUksRUFBeEIsRUFBNEJNLE9BQTVCLENBQW9DLGdCQUFtQjtBQUFBO0FBQUEsUUFBakJDLElBQWlCO0FBQUEsUUFBWEMsS0FBVzs7QUFDdEQsUUFBSUQsSUFBSSxDQUFDRSxVQUFMLENBQWdCLElBQWhCLEtBQXlCRixJQUFJLENBQUNHLFdBQUwsTUFBc0JDLE1BQW5ELEVBQTJEO0FBQzFEVixhQUFPLENBQUNXLGdCQUFSLENBQXlCTCxJQUFJLENBQUNHLFdBQUwsR0FBbUJHLE1BQW5CLENBQTBCLENBQTFCLENBQXpCLEVBQXVETCxLQUF2RDtBQUNFLEtBRkgsTUFHSztBQUNEUCxhQUFPLENBQUNhLFlBQVIsQ0FBcUJQLElBQXJCLEVBQTJCQyxLQUFLLENBQUNPLFFBQU4sRUFBM0I7QUFDRDtBQUNILEdBUEQ7O0FBSGlFLG9DQUFUQyxRQUFTO0FBQVRBLFlBQVM7QUFBQTs7QUFZakVBLFVBQVEsQ0FBQ1YsT0FBVCxDQUFpQixVQUFDVyxLQUFELEVBQVc7QUFDM0JDLGVBQVcsQ0FBQ2pCLE9BQUQsRUFBVWdCLEtBQVYsQ0FBWDtBQUNBLEdBRkQ7QUFJQSxTQUFPaEIsT0FBUDtBQUNBOztBQUdELElBQU1pQixXQUFXLEdBQUcsU0FBZEEsV0FBYyxDQUFDQyxNQUFELEVBQVNGLEtBQVQsRUFBbUI7QUFDdEMsTUFBSUcsS0FBSyxDQUFDQyxPQUFOLENBQWNKLEtBQWQsQ0FBSixFQUNDQSxLQUFLLENBQUNYLE9BQU4sQ0FBYyxVQUFDZ0IsV0FBRDtBQUFBLFdBQWlCSixXQUFXLENBQUNDLE1BQUQsRUFBU0csV0FBVCxDQUE1QjtBQUFBLEdBQWQsRUFERCxLQUdDSCxNQUFNLENBQUNELFdBQVAsQ0FDQ0QsS0FBSyxDQUFDTSxRQUFOLEdBQWlCTixLQUFqQixHQUF5QmYsUUFBUSxDQUFDc0IsY0FBVCxDQUF3QlAsS0FBeEIsQ0FEMUI7QUFHRCxDQVBEIiwiZmlsZSI6IjU1Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVZpZG9FbGVtZW50KHRhZywgcHJvcHMsIC4uLmNoaWxkcmVuKXtcblx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKVxuXG5cdE9iamVjdC5lbnRyaWVzKHByb3BzIHx8IHt9KS5mb3JFYWNoKChbbmFtZSwgdmFsdWVdKSA9PiB7XG5cdFx0aWYgKG5hbWUuc3RhcnRzV2l0aCgnb24nKSAmJiBuYW1lLnRvTG93ZXJDYXNlKCkgaW4gd2luZG93KSB7XG5cdFx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIobmFtZS50b0xvd2VyQ2FzZSgpLnN1YnN0cigyKSwgdmFsdWUpXG4gICAgfVxuXHRcdGVsc2Uge1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUudG9TdHJpbmcoKSk7XG4gICAgfSBcblx0fSlcblxuXHRjaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuXHRcdGFwcGVuZENoaWxkKGVsZW1lbnQsIGNoaWxkKVxuXHR9KVxuXG5cdHJldHVybiBlbGVtZW50XG59XG5cblxuY29uc3QgYXBwZW5kQ2hpbGQgPSAocGFyZW50LCBjaGlsZCkgPT4ge1xuXHRpZiAoQXJyYXkuaXNBcnJheShjaGlsZCkpXG5cdFx0Y2hpbGQuZm9yRWFjaCgobmVzdGVkQ2hpbGQpID0+IGFwcGVuZENoaWxkKHBhcmVudCwgbmVzdGVkQ2hpbGQpKVxuXHRlbHNlXG5cdFx0cGFyZW50LmFwcGVuZENoaWxkKFxuXHRcdFx0Y2hpbGQubm9kZVR5cGUgPyBjaGlsZCA6IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNoaWxkKVxuXHRcdClcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///557\n')},969:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": () => (/* binding */ src)\n});\n\n;// CONCATENATED MODULE: ./src/lib/helpers.js\n/* provided dependency */ var createVidoElement = __webpack_require__(557)[\"default\"];\nvar defaultTimeUpdateHandler = function defaultTimeUpdateHandler(vpaid) {\n var _int = setInterval(function () {\n if (vpaid.attributes_.timer < vpaid.attributes_.totalAdDuration) {\n vpaid.attributes_.timer += 1;\n vpaid.quartileEvents_.forEach(function (event) {\n if (vpaid.nextQuartileIndex_ >= vpaid.quartileEvents_.length) return;\n var percentPlayed = vpaid.attributes_.timer * 100.0 / vpaid.attributes_.customAdDuration;\n\n if (percentPlayed >= vpaid.quartileEvents_[vpaid.nextQuartileIndex_].value) {\n var eventName = vpaid.quartileEvents_[vpaid.nextQuartileIndex_].event;\n vpaid.callEvent_(eventName);\n vpaid.nextQuartileIndex_ += 1;\n }\n });\n } else {\n clearInterval(_int);\n vpaid.stopAd(); // TODO: Check with Eric if we need to call AdVideoComplete event, or some other event\n }\n }, 1000);\n};\nvar hideControlButtons = function hideControlButtons(slot) {\n var container = slot.parentElement;\n\n if (container && container.firstChild && container.firstChild.nextSibling) {\n container.firstChild.nextSibling.style.opacity = '0';\n container.firstChild.nextSibling.style.display = 'none';\n container.firstChild.nextSibling.style.visibility = 'hidden';\n } else {\n setTimeout(function () {\n hideControlButtons(slot);\n }, 50);\n }\n};\nvar togglePlayerControlButtonsVisibility = function togglePlayerControlButtonsVisibility(isVisible, slot) {\n if (isVisible) {\n if (slot.nextSibling && slot.nextSibling.style) {\n slot.nextSibling.style.visibility = 'visible';\n slot.nextSibling.style.display = 'block';\n }\n } else {\n if (slot.nextSibling && slot.nextSibling.style) {\n slot.nextSibling.style.visibility = 'hidden';\n slot.nextSibling.style.display = 'none';\n }\n }\n};\n/**\n *\n * @param {*} vpaid\t\t\t\t\t\t[vpaid element]\n */\n\nvar adjustScale = function adjustScale(vpaid) {\n var slot_ = vpaid.slot_,\n attributes_ = vpaid.attributes_,\n parameters_ = vpaid.parameters_;\n var initialWidth = parameters_.width,\n initialHeight = parameters_.height;\n var slotParent = slot_.parentElement;\n var slotGrandParent = slot_.parentElement.parentElement;\n slotParent.style.setProperty('width', \"\".concat(initialWidth, \"px\"), 'important');\n slotParent.style.setProperty('height', \"\".concat(initialHeight, \"px\"), 'important'); // BUG: Creates a problem with the slider on mobile screens (slider is bigger than it should be)\n // slotGrandParent.style.setProperty('width', '100%', 'important');\n\n if (attributes_.width > 400 && attributes_.height > 225) {\n slotGrandParent.style.setProperty('width', '100%', 'important');\n }\n\n slotGrandParent.style.setProperty('max-width', \"\".concat(initialWidth, \"px\"), 'important');\n slotGrandParent.style.setProperty('max-height', \"\".concat(initialHeight, \"px\"), 'important');\n slot_.style.setProperty('width', \"\".concat(initialWidth, \"px\"), 'important');\n slot_.style.setProperty('height', \"\".concat(initialHeight, \"px\"), 'important');\n var slotGranparentStyles = top.window.getComputedStyle(slotGrandParent);\n var currentWidth = slotGrandParent.clientWidth - parseFloat(slotGranparentStyles.paddingLeft) - parseFloat(slotGranparentStyles.paddingRight);\n var scale = currentWidth / initialWidth;\n if (scale > 1) scale = 1;\n if (attributes_['scale'] !== scale) attributes_['scale'] = scale;\n slotParent.style.setProperty('transform-origin', '0px 0px', 'important');\n slotParent.style.setProperty('transform', \"scale(\".concat(scale, \")\")); // Adjust the height of slotGrandParent because it stays fixed\n\n var aspectRatio = initialWidth / initialHeight;\n slotGrandParent.style.setProperty('height', \"\".concat(slotGrandParent.clientWidth / aspectRatio, \"px\"), 'important'); // Adjust slider right\n\n if (slotGrandParent.getBoundingClientRect().x <= 0) {\n slotGrandParent.style.setProperty('right', '0', 'important');\n }\n};\nvar createFontFaces = function createFontFaces(fonts) {\n var formatMap = {\n ttf: 'truetype',\n otf: 'opentype',\n woff: 'woff',\n woff2: 'woff2'\n };\n var fontFaces = Object.keys(fonts).map(function (fontName) {\n var ext = fonts[fontName].split('.').pop();\n var format = \"format('\".concat(formatMap[ext], \"')\");\n var weight = fontName.split('-').pop().toLowerCase();\n var style = (fontName.split('-')[2] || 'normal').toLowerCase();\n var family = fontName.split('-').join('');\n return \"\\n\\t\\t\\t@font-face {\\n\\t\\t\\t\\tfont-family: '\".concat(family, \"';\\n\\t\\t\\t\\tsrc: url('\").concat(fonts[fontName], \"') \").concat(format, \";\\n\\t\\t\\t\\tfont-style: \").concat(style, \";\\n\\t\\t\\t\\tfont-weight: \").concat(weight, \";\\n\\t\\t\\t}\\n\\t\\t\");\n });\n return createVidoElement(\"style\", null, fontFaces);\n};\n;// CONCATENATED MODULE: ./src/vpaid.js\n/* provided dependency */ var vpaid_createVidoElement = __webpack_require__(557)[\"default\"];\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar VpaidVideoPlayer = /*#__PURE__*/function () {\n /**\n * @constructor\n */\n function VpaidVideoPlayer(creative) {\n _classCallCheck(this, VpaidVideoPlayer);\n\n /**\n * The slot is the div element on the main page that the ad is supposed to\n * occupy.\n * @type {Object}\n * @private\n */\n this.slot_ = null;\n /**\n * Creative template (desktop or mobile)\n */\n\n this.creative = creative;\n /**\n * The video slot is the video element used by the ad to render video content.\n * @type {Object}\n * @private\n */\n\n this.videoSlot_ = null;\n /**\n * An object containing all registered events. These events are all\n * callbacks for use by the VPAID ad.\n * @type {Object}\n * @private\n */\n\n this.eventsCallbacks_ = {};\n /**\n * A list of getable and setable attributes.\n * @type {Object}\n * @private\n */\n\n this.attributes_ = {\n companions: '',\n desiredBitrate: 256,\n duration: 10,\n expanded: false,\n width: 0,\n height: 0,\n icons: '',\n linear: true,\n remainingTime: 10,\n skippableState: false,\n viewMode: 'normal',\n volume: 1.0,\n timer: 0,\n customAdDuration: 15,\n totalAdDuration: 45,\n initialUnmute: false,\n scale: 1\n };\n /**\n * A set of ad playback events to be reported.\n * @type {Object}\n * @private\n */\n\n this.quartileEvents_ = [{\n event: 'AdImpression',\n value: 0\n }, {\n event: 'AdVideoStart',\n value: 0\n }, {\n event: 'AdVideoFirstQuartile',\n value: 25\n }, {\n event: 'AdVideoMidpoint',\n value: 50\n }, {\n event: 'AdVideoThirdQuartile',\n value: 75\n }, {\n event: 'AdVideoComplete',\n value: 100\n }];\n /**\n * @type {number} An index into what quartile was last reported.\n * @private\n */\n\n this.nextQuartileIndex_ = 0;\n /**\n * Parameters passed in from the AdParameters section of the VAST.\n * Used for video URL and MIME type.\n *\n * @type {!object}\n * @private\n */\n\n this.parameters_ = {};\n /**\n * The ad object\n * @type {Object}\n * @private\n */\n\n this.ad = null;\n }\n /**\n * Returns the supported VPAID verion.\n * @param {string} version\n * @return {string}\n */\n\n\n _createClass(VpaidVideoPlayer, [{\n key: \"handshakeVersion\",\n value: function handshakeVersion(version) {\n return '2.0';\n }\n /**\n * Initializes all attributes in the ad. The ad will not start until startAd is\\\n * called.\n *\n * @param {number} width The ad width.\n * @param {number} height The ad height.\n * @param {string} viewMode The ad view mode.\n * @param {number} desiredBitrate The desired bitrate.\n * @param {Object} creativeData Data associated with the creative.\n * @param {Object} environmentVars Runtime variables associated with the\n * creative like the slot and video slot.\n */\n\n }, {\n key: \"initAd\",\n value: function initAd(width, height, viewMode, desiredBitrate, creativeData, environmentVars) {\n var _this = this;\n\n this.attributes_['width'] = width;\n this.attributes_['height'] = height;\n this.attributes_['viewMode'] = viewMode;\n this.attributes_['desiredBitrate'] = desiredBitrate; // slot and videoSlot are passed as part of the environmentVars\n\n this.parameters_ = JSON.parse(creativeData['AdParameters']);\n this.slot_ = environmentVars.slot;\n this.videoSlot_ = environmentVars.videoSlot;\n this.log(\"initAd: \".concat(width, \"x\").concat(height, \", viewMode: \").concat(viewMode, \", desiredBitrate: \").concat(desiredBitrate), \"creativeData: \".concat(creativeData['AdParameters']));\n top.window.addEventListener('resize', function () {\n return adjustScale(_this);\n });\n this.setReactiveAttributes();\n this.updateVideoSlot_();\n this.videoSlot_.addEventListener('loadedmetadata', this.loadedMetadata_.bind(this), false);\n\n if (this.parameters_.format === 'video') {\n this.videoSlot_.addEventListener('timeupdate', this.timeUpdateHandler_.bind(this), false);\n this.videoSlot_.addEventListener('ended', this.stopAd.bind(this), false);\n } else {\n defaultTimeUpdateHandler(this);\n }\n }\n /**\n * Creates or updates the video slot and fills it with a supported video.\n * @private\n */\n\n }, {\n key: \"updateVideoSlot_\",\n value: function updateVideoSlot_() {\n var _this2 = this;\n\n if (!this.parameters_.options) this.parameters_.options = {};\n var adContainer = vpaid_createVidoElement(\"div\", {\n \"class\": \"creative-container\"\n });\n\n if (this.videoSlot_ == null) {\n this.videoSlot_ = vpaid_createVidoElement(\"video\", {\n \"class\": \"ad-video\",\n width: \"100%\",\n muted: true,\n playsinline: true\n });\n this.log('Warning: No video element passed to ad, creating element.');\n }\n\n this.videoSlot_.setAttribute('src', this.parameters_['video']);\n this.videoSlot_.setAttribute('muted', 'true');\n this.videoSlot_.muted = true;\n this.videoSlot_.setAttribute('playsinline', 'true');\n if (this.parameters_.options.autoplay) this.videoSlot_.setAttribute('autoplay', 'true'); // if (this.parameters_.options.firstClickUnmute) this.setupUnmute(adContainer)\n\n if (this.parameters_.options.loop) {\n this.videoSlot_.setAttribute('loop', 'true');\n this.videoSlot_.loop = true;\n }\n\n var onIframeLoad = function onIframeLoad(e) {\n var frame = e.target.contentWindow.document;\n frame.body.style.overflow = 'hidden';\n _this2._frame.contentWindow.document.body.style.margin = '0';\n _this2._frame.contentWindow.document.body.style.padding = '0';\n _this2.iDoc = _this2._frame.contentWindow.document;\n\n var container = _this2.iDoc.querySelector('.creative-container');\n\n container.appendChild(_this2.videoSlot_);\n if (_this2.parameters_.options.firstClickUnmute) _this2.setupUnmute(adContainer, _this2.iDoc); // if (this.parameters_.options.pauseVideoIfHidden) this.setupPauseVideoIfHidden()\n\n _this2.videoSlot_.addEventListener('loadedmetadata', _this2.loadedMetadata_.bind(_this2), false);\n\n if (_this2.parameters_.format === 'video') {\n _this2.videoSlot_.addEventListener('timeupdate', _this2.timeUpdateHandler_.bind(_this2), false);\n\n _this2.videoSlot_.addEventListener('ended', _this2.stopAd.bind(_this2), false); // Handle events for \"carousel\" and \"image\" formats\n\n } else {\n _this2.videoSlot_.style.setProperty('background', 'transparent', 'important');\n\n _this2.videoSlot_.style.position = 'absolute';\n _this2.videoSlot_.style.top = '0%';\n _this2.videoSlot_.style.left = '0%';\n _this2.videoSlot_.style.transition = 'all 1s';\n _this2.videoSlot_.style.width = '100%';\n _this2.videoSlot_.style.height = '100%';\n _this2.videoSlot_.style.zIndex = '999';\n }\n\n var isVideoSmall = false;\n\n var makeSmallVideo = function makeSmallVideo() {\n _this2.videoSlot_.style.position = 'absolute';\n _this2.videoSlot_.style.top = '90px';\n _this2.videoSlot_.style.left = '25px';\n _this2.videoSlot_.style.transition = 'all 1s';\n _this2.videoSlot_.style.width = '340px';\n _this2.videoSlot_.style.height = '191px';\n _this2.videoSlot_.style.zIndex = '999';\n }; // Video transition\n\n\n if (_this2.parameters_.options.makeSmallVideo) {\n _this2.videoSlot_.ontimeupdate = function (e) {\n if (!isVideoSmall) {\n if (_this2.videoSlot_.currentTime >= 2) {\n isVideoSmall = true;\n makeSmallVideo();\n }\n }\n };\n\n _this2.videoSlot_.addEventListener('mouseover', function () {\n if (!isVideoSmall) {\n makeSmallVideo();\n }\n\n isVideoSmall = true;\n });\n }\n\n _this2.ad = new _this2.creative(_this2, container);\n\n _this2.callEvent_('AdLoaded');\n };\n\n this._frame = vpaid_createVidoElement(\"iframe\", null);\n var style = {\n width: '100%',\n height: '100%',\n border: 0,\n position: 'absolute',\n overflow: 'hidden',\n margin: 0,\n padding: 0\n };\n Object.assign(this._frame.style, style);\n this._frame.src = 'about:self';\n this._frame.srcdoc = adContainer.outerHTML;\n this._frame.onload = onIframeLoad;\n this.slot_.appendChild(this._frame); // Only for development\n\n if (false) {}\n }\n /**\n * Called when the ad is clicked.\n * @private\n */\n\n }, {\n key: \"clickAd_\",\n value: function clickAd_() {\n this.log('clickAd_');\n this.log('AdClickThru'); // this.callEvent_('AdClickThru', '','0', true)\n\n if ('AdClickThru' in this.eventsCallbacks_) {\n this.eventsCallbacks_['AdClickThru']('', '0', true);\n }\n }\n /**\n * Called by the video element when video metadata is loaded.\n * @private\n */\n\n }, {\n key: \"loadedMetadata_\",\n value: function loadedMetadata_() {\n // The ad duration is not known until the media metadata is loaded.\n // Then, update the player with the duration change.\n this.attributes_['duration'] = this.videoSlot_.duration;\n this.callEvent_('AdDurationChange');\n }\n /**\n * Called by the video element when the video reaches specific points during\n * playback.\n * @private\n */\n\n }, {\n key: \"timeUpdateHandler_\",\n value: function timeUpdateHandler_() {\n if (this.nextQuartileIndex_ >= this.quartileEvents_.length) {\n return;\n }\n\n var percentPlayed = this.videoSlot_.currentTime * 100.0 / this.videoSlot_.duration;\n\n if (percentPlayed >= this.quartileEvents_[this.nextQuartileIndex_].value) {\n var lastQuartileEvent = this.quartileEvents_[this.nextQuartileIndex_].event;\n\n if (this.eventsCallbacks_[lastQuartileEvent]) {\n this.callEvent_(lastQuartileEvent);\n }\n\n this.nextQuartileIndex_ += 1;\n }\n\n if (this.videoSlot_.duration > 0) {\n this.attributes_['remainingTime'] = this.videoSlot_.duration - this.videoSlot_.currentTime;\n }\n }\n /**\n * Helper function to update the size of the video player.\n * @private\n */\n\n }, {\n key: \"updateVideoPlayerSize_\",\n value: function updateVideoPlayerSize_() {\n this.videoSlot_.setAttribute('width', this.attributes_['width']);\n this.videoSlot_.setAttribute('height', this.attributes_['height']);\n }\n /**\n * Called by the wrapper to start the ad.\n */\n\n }, {\n key: \"startAd\",\n value: function startAd() {\n this.log('Starting ad');\n this.callEvent_('AdStarted'); // if (process.env.NODE_ENV !== 'development' && this.parameters_.format !== 'video') {\n // hideControlButtons(this.slot_);\n // }\n }\n /**\n * Called by the wrapper to stop the ad.\n */\n\n }, {\n key: \"stopAd\",\n value: function stopAd() {\n this.log('Stopping ad'); // Calling AdStopped immediately terminates the ad. Setting a timeout allows\n // events to go through.\n\n var callback = this.callEvent_.bind(this);\n setTimeout(callback, 75, ['AdStopped']);\n }\n /**\n * Called when the video player changes the width/height of the container.\n *\n * @param {number} width The new width.\n * @param {number} height A new height.\n * @param {string} viewMode A new view mode.\n */\n\n }, {\n key: \"resizeAd\",\n value: function resizeAd(width, height, viewMode) {\n var _this3 = this;\n\n this.log('resizeAd ' + width + 'x' + height + ' ' + viewMode);\n this.attributes_['width'] = width;\n this.attributes_['height'] = height;\n this.attributes_['viewMode'] = viewMode;\n this.updateVideoPlayerSize_();\n this.callEvent_('AdSizeChange');\n setTimeout(function () {\n adjustScale(_this3);\n }, 100);\n }\n /**\n * Pauses the ad.\n */\n\n }, {\n key: \"pauseAd\",\n value: function pauseAd() {\n this.log('pauseAd');\n this.videoSlot_.pause();\n this.callEvent_('AdPaused');\n }\n /**\n * Resumes the ad.\n */\n\n }, {\n key: \"resumeAd\",\n value: function resumeAd() {\n this.log('resumeAd');\n this.videoSlot_.play();\n this.callEvent_('AdPlaying');\n }\n /**\n * Expands the ad.\n */\n\n }, {\n key: \"expandAd\",\n value: function expandAd() {\n this.log('expandAd');\n this.attributes_['expanded'] = true;\n this.callEvent_('AdExpanded');\n }\n /**\n * Collapses the ad.\n */\n\n }, {\n key: \"collapseAd\",\n value: function collapseAd() {\n this.log('collapseAd');\n this.attributes_['expanded'] = false;\n }\n /**\n * Skips the ad.\n */\n\n }, {\n key: \"skipAd\",\n value: function skipAd() {\n this.log('skipAd');\n var skippableState = this.attributes_['skippableState'];\n\n if (skippableState) {\n this.callEvent_('AdSkipped');\n }\n }\n /**\n * Registers a callback for an event.\n *\n * @param {Function} aCallback The callback function.\n * @param {string} eventName The callback type.\n * @param {Object} aContext The context for the callback.\n */\n\n }, {\n key: \"subscribe\",\n value: function subscribe(aCallback, eventName, aContext) {\n this.log('Subscribe ' + eventName);\n var callBack = aCallback.bind(aContext);\n this.eventsCallbacks_[eventName] = callBack;\n }\n }, {\n key: \"devSuscribe\",\n value: function devSuscribe() {\n var _eventsCallbacks,\n _this4 = this;\n\n var eventsCallbacks = (_eventsCallbacks = {\n AdReady: function AdReady() {},\n AdLoaded: function AdLoaded() {},\n AdStarted: function AdStarted() {},\n AdVideoStart: function AdVideoStart() {},\n AdImpression: function AdImpression() {},\n AdClickThru: function AdClickThru() {},\n AdDurationChange: function AdDurationChange() {},\n AdError: function AdError() {},\n AdExpandedChange: function AdExpandedChange() {}\n }, _defineProperty(_eventsCallbacks, \"AdImpression\", function AdImpression() {}), _defineProperty(_eventsCallbacks, \"AdLinearChange\", function AdLinearChange() {}), _defineProperty(_eventsCallbacks, \"AdLoaded\", function AdLoaded() {}), _defineProperty(_eventsCallbacks, \"AdPaused\", function AdPaused() {}), _defineProperty(_eventsCallbacks, \"AdPlaying\", function AdPlaying() {}), _defineProperty(_eventsCallbacks, \"AdReady\", function AdReady() {}), _defineProperty(_eventsCallbacks, \"AdRemainingTimeChange\", function AdRemainingTimeChange() {}), _defineProperty(_eventsCallbacks, \"AdSizeChange\", function AdSizeChange() {}), _defineProperty(_eventsCallbacks, \"AdSkippableStateChange\", function AdSkippableStateChange() {}), _defineProperty(_eventsCallbacks, \"AdSkipped\", function AdSkipped() {}), _defineProperty(_eventsCallbacks, \"AdStarted\", function AdStarted() {}), _defineProperty(_eventsCallbacks, \"AdStopped\", function AdStopped() {}), _defineProperty(_eventsCallbacks, \"AdVideoComplete\", function AdVideoComplete() {}), _defineProperty(_eventsCallbacks, \"AdVideoFirstQuartile\", function AdVideoFirstQuartile() {}), _defineProperty(_eventsCallbacks, \"AdVideoMidpoint\", function AdVideoMidpoint() {}), _defineProperty(_eventsCallbacks, \"AdVideoStart\", function AdVideoStart() {}), _defineProperty(_eventsCallbacks, \"AdVideoThirdQuartile\", function AdVideoThirdQuartile() {}), _defineProperty(_eventsCallbacks, \"AdVolumeChange\", function AdVolumeChange() {}), _eventsCallbacks);\n Object.keys(eventsCallbacks).forEach(function (eventName) {\n _this4.subscribe(eventsCallbacks[eventName], eventName, null);\n });\n }\n /**\n * Removes a callback based on the eventName.\n *\n * @param {string} eventName The callback type.\n */\n\n }, {\n key: \"unsubscribe\",\n value: function unsubscribe(eventName) {\n this.log('unsubscribe ' + eventName);\n this.eventsCallbacks_[eventName] = null;\n }\n /**\n * Returns whether the ad is linear.\n *\n * @return {boolean} True if the ad is a linear, false for non linear.\n */\n\n }, {\n key: \"getAdLinear\",\n value: function getAdLinear() {\n return this.attributes_['linear'];\n }\n /**\n * Returns ad width.\n *\n * @return {number} The ad width.\n */\n\n }, {\n key: \"getAdWidth\",\n value: function getAdWidth() {\n return this.attributes_['width'];\n }\n /**\n * Returns ad height.\n *\n * @return {number} The ad height.\n */\n\n }, {\n key: \"getAdHeight\",\n value: function getAdHeight() {\n return this.attributes_['height'];\n }\n /**\n * Returns true if the ad is expanded.\n *\n * @return {boolean}\n */\n\n }, {\n key: \"getAdExpanded\",\n value: function getAdExpanded() {\n this.log('getAdExpanded');\n return this.attributes_['expanded'];\n }\n /**\n * Returns the skippable state of the ad.\n *\n * @return {boolean}\n */\n\n }, {\n key: \"getAdSkippableState\",\n value: function getAdSkippableState() {\n this.log('getAdSkippableState');\n return this.attributes_['skippableState'];\n }\n /**\n * Returns the remaining ad time, in seconds.\n *\n * @return {number} The time remaining in the ad.\n */\n\n }, {\n key: \"getAdRemainingTime\",\n value: function getAdRemainingTime() {\n return this.attributes_['remainingTime'];\n }\n /**\n * Returns the duration of the ad, in seconds.\n *\n * @return {number} The duration of the ad.\n */\n\n }, {\n key: \"getAdDuration\",\n value: function getAdDuration() {\n return this.attributes_['duration'];\n }\n /**\n * Returns the ad volume.\n *\n * @return {number} The volume of the ad.\n */\n\n }, {\n key: \"getAdVolume\",\n value: function getAdVolume() {\n this.log('getAdVolume');\n return this.attributes_['volume'];\n }\n /**\n * Sets the ad volume.\n *\n * @param {number} value The volume in percentage.\n */\n\n }, {\n key: \"setAdVolume\",\n value: function setAdVolume(value) {\n this.attributes_['volume'] = value;\n this.videoSlot_.volume = value;\n this.log('setAdVolume ' + value);\n this.callEvent_('AdVolumeChange');\n }\n /**\n * Returns a list of companion ads for the ad.\n *\n * @return {string} List of companions in VAST XML.\n */\n\n }, {\n key: \"getAdCompanions\",\n value: function getAdCompanions() {\n return this.attributes_['companions'];\n }\n /**\n * Returns a list of icons.\n *\n * @return {string} A list of icons.\n */\n\n }, {\n key: \"getAdIcons\",\n value: function getAdIcons() {\n return this.attributes_['icons'];\n }\n /**\n * Logs events and messages.\n *\n * @param {string} message\n */\n\n }, {\n key: \"log\",\n value: function log() {\n var _console;\n\n if (false) {} // console.log(...arguments);\n }\n /**\n * Calls an event if there is a callback.\n *\n * @param {string} eventType\n * @private\n */\n\n }, {\n key: \"callEvent_\",\n value: function callEvent_(eventType) {\n this.log(eventType);\n\n if (eventType in this.eventsCallbacks_) {\n this.eventsCallbacks_[eventType]();\n }\n }\n }, {\n key: \"setReactiveAttributes\",\n value: function setReactiveAttributes() {\n var _this5 = this;\n\n this.attributes_ = new Proxy(this.attributes_, {\n set: function set(target, key, value) {\n target[key] = value;\n\n if (key === 'scale') {\n var event = new CustomEvent('scaling', {\n detail: {\n scale: value\n }\n });\n\n var container = _this5.slot_.querySelector('.creative-container');\n\n if (container) container.dispatchEvent(event);\n }\n\n return true;\n },\n get: function get(target, prop, receiver) {\n return target[prop];\n }\n });\n }\n }, {\n key: \"setupPauseVideoIfHidden\",\n value: function setupPauseVideoIfHidden() {\n var _this6 = this;\n\n var observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutationRecord) {\n if (_this6.videoSlot_.style.display === 'none') {\n _this6.pauseAd();\n } else {\n _this6.resumeAd();\n }\n });\n });\n observer.observe(this.videoSlot_, {\n attributes: true,\n attributeFilter: ['style']\n });\n }\n }, {\n key: \"setupUnmute\",\n value: function setupUnmute(adContainer, iDoc) {\n var _this7 = this;\n\n var unmuteVideo = function unmuteVideo() {\n if (_this7.attributes_.initialUnmute === false) {\n _this7.setAdVolume(1);\n\n _this7.videoSlot_.muted = false;\n _this7.attributes_.initialUnmute = true; // Remove event listeners\n\n _this7.videoSlot_.removeEventListener('click', unmuteVideo);\n\n _this7.slot_.removeEventListener('click', unmuteVideo);\n\n adContainer.removeEventListener('click', unmuteVideo);\n }\n };\n\n this.videoSlot_.addEventListener('click', unmuteVideo);\n this.slot_.addEventListener('click', unmuteVideo);\n adContainer.addEventListener('click', unmuteVideo);\n iDoc.addEventListener('click', unmuteVideo);\n }\n }]);\n\n return VpaidVideoPlayer;\n}();\n\n\n// EXTERNAL MODULE: ./src/ad/desktop/desktop.scss\nvar desktop = __webpack_require__(646);\n;// CONCATENATED MODULE: ./src/lib/glide/glide.modular.esm.js\nfunction _typeof2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\n/*!\n * Glide.js v3.4.1\n * (c) 2013-2019 Jędrzej Chałubek (http://jedrzejchalubek.com/)\n * Released under the MIT License.\n */\nvar defaults = {\n /**\n * Type of the movement.\n *\n * Available types:\n * `slider` - Rewinds slider to the start/end when it reaches the first or last slide.\n * `carousel` - Changes slides without starting over when it reaches the first or last slide.\n *\n * @type {String}\n */\n type: 'slider',\n\n /**\n * Start at specific slide number defined with zero-based index.\n *\n * @type {Number}\n */\n startAt: 0,\n\n /**\n * A number of slides visible on the single viewport.\n *\n * @type {Number}\n */\n perView: 1,\n\n /**\n * Focus currently active slide at a specified position in the track.\n *\n * Available inputs:\n * `center` - Current slide will be always focused at the center of a track.\n * `0,1,2,3...` - Current slide will be focused on the specified zero-based index.\n *\n * @type {String|Number}\n */\n focusAt: 0,\n\n /**\n * A size of the gap added between slides.\n *\n * @type {Number}\n */\n gap: 10,\n\n /**\n * Change slides after a specified interval. Use `false` for turning off autoplay.\n *\n * @type {Number|Boolean}\n */\n autoplay: false,\n\n /**\n * Stop autoplay on mouseover event.\n *\n * @type {Boolean}\n */\n hoverpause: true,\n\n /**\n * Allow for changing slides with left and right keyboard arrows.\n *\n * @type {Boolean}\n */\n keyboard: true,\n\n /**\n * Stop running `perView` number of slides from the end. Use this\n * option if you don't want to have an empty space after\n * a slider. Works only with `slider` type and a\n * non-centered `focusAt` setting.\n *\n * @type {Boolean}\n */\n bound: false,\n\n /**\n * Minimal swipe distance needed to change the slide. Use `false` for turning off a swiping.\n *\n * @type {Number|Boolean}\n */\n swipeThreshold: 80,\n\n /**\n * Minimal mouse drag distance needed to change the slide. Use `false` for turning off a dragging.\n *\n * @type {Number|Boolean}\n */\n dragThreshold: 120,\n\n /**\n * A maximum number of slides to which movement will be made on swiping or dragging. Use `false` for unlimited.\n *\n * @type {Number|Boolean}\n */\n perTouch: false,\n\n /**\n * Moving distance ratio of the slides on a swiping and dragging.\n *\n * @type {Number}\n */\n touchRatio: 0.5,\n\n /**\n * Angle required to activate slides moving on swiping or dragging.\n *\n * @type {Number}\n */\n touchAngle: 45,\n\n /**\n * Duration of the animation in milliseconds.\n *\n * @type {Number}\n */\n animationDuration: 400,\n\n /**\n * Allows looping the `slider` type. Slider will rewind to the first/last slide when it's at the start/end.\n *\n * @type {Boolean}\n */\n rewind: true,\n\n /**\n * Duration of the rewinding animation of the `slider` type in milliseconds.\n *\n * @type {Number}\n */\n rewindDuration: 800,\n\n /**\n * Easing function for the animation.\n *\n * @type {String}\n */\n animationTimingFunc: 'cubic-bezier(.165, .840, .440, 1)',\n\n /**\n * Throttle costly events at most once per every wait milliseconds.\n *\n * @type {Number}\n */\n throttle: 10,\n\n /**\n * Moving direction mode.\n *\n * Available inputs:\n * - 'ltr' - left to right movement,\n * - 'rtl' - right to left movement.\n *\n * @type {String}\n */\n direction: 'ltr',\n\n /**\n * The distance value of the next and previous viewports which\n * have to peek in the current view. Accepts number and\n * pixels as a string. Left and right peeking can be\n * set up separately with a directions object.\n *\n * For example:\n * `100` - Peek 100px on the both sides.\n * { before: 100, after: 50 }` - Peek 100px on the left side and 50px on the right side.\n *\n * @type {Number|String|Object}\n */\n peek: 0,\n\n /**\n * Collection of options applied at specified media breakpoints.\n * For example: display two slides per view under 800px.\n * `{\n * '800px': {\n * perView: 2\n * }\n * }`\n */\n breakpoints: {},\n\n /**\n * Collection of internally used HTML classes.\n *\n * @todo Refactor `slider` and `carousel` properties to single `type: { slider: '', carousel: '' }` object\n * @type {Object}\n */\n classes: {\n direction: {\n ltr: 'glide--ltr',\n rtl: 'glide--rtl'\n },\n slider: 'glide--slider',\n carousel: 'glide--carousel',\n swipeable: 'glide--swipeable',\n dragging: 'glide--dragging',\n cloneSlide: 'glide__slide--clone',\n activeNav: 'glide__bullet--active',\n activeSlide: 'glide__slide--active',\n disabledArrow: 'glide__arrow--disabled'\n }\n};\n/**\n * Outputs warning message to the bowser console.\n *\n * @param {String} msg\n * @return {Void}\n */\n\nfunction warn(msg) {\n console.error(\"[Glide warn]: \" + msg);\n}\n\nvar _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n return _typeof2(obj);\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n};\n\nvar classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nvar inherits = function inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + _typeof2(superClass));\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar possibleConstructorReturn = function possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (_typeof2(call) === \"object\" || typeof call === \"function\") ? call : self;\n};\n/**\n * Converts value entered as number\n * or string to integer value.\n *\n * @param {String} value\n * @returns {Number}\n */\n\n\nfunction toInt(value) {\n return parseInt(value);\n}\n/**\n * Converts value entered as number\n * or string to flat value.\n *\n * @param {String} value\n * @returns {Number}\n */\n\n\nfunction toFloat(value) {\n return parseFloat(value);\n}\n/**\n * Indicates whether the specified value is a string.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\n\nfunction isString(value) {\n return typeof value === 'string';\n}\n/**\n * Indicates whether the specified value is an object.\n *\n * @param {*} value\n * @return {Boolean}\n *\n * @see https://github.com/jashkenas/underscore\n */\n\n\nfunction isObject(value) {\n var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n return type === 'function' || type === 'object' && !!value; // eslint-disable-line no-mixed-operators\n}\n/**\n * Indicates whether the specified value is a number.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\n\nfunction isNumber(value) {\n return typeof value === 'number';\n}\n/**\n * Indicates whether the specified value is a function.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n/**\n * Indicates whether the specified value is undefined.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\n\nfunction isUndefined(value) {\n return typeof value === 'undefined';\n}\n/**\n * Indicates whether the specified value is an array.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\n\nfunction isArray(value) {\n return value.constructor === Array;\n}\n/**\n * Creates and initializes specified collection of extensions.\n * Each extension receives access to instance of glide and rest of components.\n *\n * @param {Object} glide\n * @param {Object} extensions\n *\n * @returns {Object}\n */\n\n\nfunction mount(glide, extensions, events) {\n var components = {};\n\n for (var name in extensions) {\n if (isFunction(extensions[name])) {\n components[name] = extensions[name](glide, components, events);\n } else {\n warn('Extension must be a function');\n }\n }\n\n for (var _name in components) {\n if (isFunction(components[_name].mount)) {\n components[_name].mount();\n }\n }\n\n return components;\n}\n/**\n * Defines getter and setter property on the specified object.\n *\n * @param {Object} obj Object where property has to be defined.\n * @param {String} prop Name of the defined property.\n * @param {Object} definition Get and set definitions for the property.\n * @return {Void}\n */\n\n\nfunction glide_modular_esm_define(obj, prop, definition) {\n Object.defineProperty(obj, prop, definition);\n}\n/**\n * Sorts aphabetically object keys.\n *\n * @param {Object} obj\n * @return {Object}\n */\n\n\nfunction sortKeys(obj) {\n return Object.keys(obj).sort().reduce(function (r, k) {\n r[k] = obj[k];\n return r[k], r;\n }, {});\n}\n/**\n * Merges passed settings object with default options.\n *\n * @param {Object} defaults\n * @param {Object} settings\n * @return {Object}\n */\n\n\nfunction mergeOptions(defaults, settings) {\n var options = _extends({}, defaults, settings); // `Object.assign` do not deeply merge objects, so we\n // have to do it manually for every nested object\n // in options. Although it does not look smart,\n // it's smaller and faster than some fancy\n // merging deep-merge algorithm script.\n\n\n if (settings.hasOwnProperty('classes')) {\n options.classes = _extends({}, defaults.classes, settings.classes);\n\n if (settings.classes.hasOwnProperty('direction')) {\n options.classes.direction = _extends({}, defaults.classes.direction, settings.classes.direction);\n }\n }\n\n if (settings.hasOwnProperty('breakpoints')) {\n options.breakpoints = _extends({}, defaults.breakpoints, settings.breakpoints);\n }\n\n return options;\n}\n\nvar EventsBus = function () {\n /**\n * Construct a EventBus instance.\n *\n * @param {Object} events\n */\n function EventsBus() {\n var events = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n classCallCheck(this, EventsBus);\n this.events = events;\n this.hop = events.hasOwnProperty;\n }\n /**\n * Adds listener to the specifed event.\n *\n * @param {String|Array} event\n * @param {Function} handler\n */\n\n\n createClass(EventsBus, [{\n key: 'on',\n value: function on(event, handler) {\n if (isArray(event)) {\n for (var i = 0; i < event.length; i++) {\n this.on(event[i], handler);\n }\n } // Create the event's object if not yet created\n\n\n if (!this.hop.call(this.events, event)) {\n this.events[event] = [];\n } // Add the handler to queue\n\n\n var index = this.events[event].push(handler) - 1; // Provide handle back for removal of event\n\n return {\n remove: function remove() {\n delete this.events[event][index];\n }\n };\n }\n /**\n * Runs registered handlers for specified event.\n *\n * @param {String|Array} event\n * @param {Object=} context\n */\n\n }, {\n key: 'emit',\n value: function emit(event, context) {\n if (isArray(event)) {\n for (var i = 0; i < event.length; i++) {\n this.emit(event[i], context);\n }\n } // If the event doesn't exist, or there's no handlers in queue, just leave\n\n\n if (!this.hop.call(this.events, event)) {\n return;\n } // Cycle through events queue, fire!\n\n\n this.events[event].forEach(function (item) {\n item(context || {});\n });\n }\n }]);\n return EventsBus;\n}();\n\nvar Glide = function () {\n /**\n * Construct glide.\n *\n * @param {String} selector\n * @param {Object} options\n */\n function Glide(selector) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n classCallCheck(this, Glide);\n this._c = {};\n this._t = [];\n this._e = new EventsBus();\n this.disabled = false;\n this.selector = selector;\n this.settings = mergeOptions(defaults, options);\n this.index = this.settings.startAt;\n }\n /**\n * Initializes glide.\n *\n * @param {Object} extensions Collection of extensions to initialize.\n * @return {Glide}\n */\n\n\n createClass(Glide, [{\n key: 'mount',\n value: function mount$$1() {\n var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this._e.emit('mount.before');\n\n if (isObject(extensions)) {\n this._c = mount(this, extensions, this._e);\n } else {\n warn('You need to provide a object on `mount()`');\n }\n\n this._e.emit('mount.after');\n\n return this;\n }\n /**\n * Collects an instance `translate` transformers.\n *\n * @param {Array} transformers Collection of transformers.\n * @return {Void}\n */\n\n }, {\n key: 'mutate',\n value: function mutate() {\n var transformers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n if (isArray(transformers)) {\n this._t = transformers;\n } else {\n warn('You need to provide a array on `mutate()`');\n }\n\n return this;\n }\n /**\n * Updates glide with specified settings.\n *\n * @param {Object} settings\n * @return {Glide}\n */\n\n }, {\n key: 'update',\n value: function update() {\n var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.settings = mergeOptions(this.settings, settings);\n\n if (settings.hasOwnProperty('startAt')) {\n this.index = settings.startAt;\n }\n\n this._e.emit('update');\n\n return this;\n }\n /**\n * Change slide with specified pattern. A pattern must be in the special format:\n * `>` - Move one forward\n * `<` - Move one backward\n * `={i}` - Go to {i} zero-based slide (eq. '=1', will go to second slide)\n * `>>` - Rewinds to end (last slide)\n * `<<` - Rewinds to start (first slide)\n *\n * @param {String} pattern\n * @return {Glide}\n */\n\n }, {\n key: 'go',\n value: function go(pattern) {\n this._c.Run.make(pattern);\n\n return this;\n }\n /**\n * Move track by specified distance.\n *\n * @param {String} distance\n * @return {Glide}\n */\n\n }, {\n key: 'move',\n value: function move(distance) {\n this._c.Transition.disable();\n\n this._c.Move.make(distance);\n\n return this;\n }\n /**\n * Destroy instance and revert all changes done by this._c.\n *\n * @return {Glide}\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n this._e.emit('destroy');\n\n return this;\n }\n /**\n * Start instance autoplaying.\n *\n * @param {Boolean|Number} interval Run autoplaying with passed interval regardless of `autoplay` settings\n * @return {Glide}\n */\n\n }, {\n key: 'play',\n value: function play() {\n var interval = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (interval) {\n this.settings.autoplay = interval;\n }\n\n this._e.emit('play');\n\n return this;\n }\n /**\n * Stop instance autoplaying.\n *\n * @return {Glide}\n */\n\n }, {\n key: 'pause',\n value: function pause() {\n this._e.emit('pause');\n\n return this;\n }\n /**\n * Sets glide into a idle status.\n *\n * @return {Glide}\n */\n\n }, {\n key: 'disable',\n value: function disable() {\n this.disabled = true;\n return this;\n }\n /**\n * Sets glide into a active status.\n *\n * @return {Glide}\n */\n\n }, {\n key: 'enable',\n value: function enable() {\n this.disabled = false;\n return this;\n }\n /**\n * Adds cuutom event listener with handler.\n *\n * @param {String|Array} event\n * @param {Function} handler\n * @return {Glide}\n */\n\n }, {\n key: 'on',\n value: function on(event, handler) {\n this._e.on(event, handler);\n\n return this;\n }\n /**\n * Checks if glide is a precised type.\n *\n * @param {String} name\n * @return {Boolean}\n */\n\n }, {\n key: 'isType',\n value: function isType(name) {\n return this.settings.type === name;\n }\n /**\n * Gets value of the core options.\n *\n * @return {Object}\n */\n\n }, {\n key: 'settings',\n get: function get$$1() {\n return this._o;\n }\n /**\n * Sets value of the core options.\n *\n * @param {Object} o\n * @return {Void}\n */\n ,\n set: function set$$1(o) {\n if (isObject(o)) {\n this._o = o;\n } else {\n warn('Options must be an `object` instance.');\n }\n }\n /**\n * Gets current index of the slider.\n *\n * @return {Object}\n */\n\n }, {\n key: 'index',\n get: function get$$1() {\n return this._i;\n }\n /**\n * Sets current index a slider.\n *\n * @return {Object}\n */\n ,\n set: function set$$1(i) {\n this._i = toInt(i);\n }\n /**\n * Gets type name of the slider.\n *\n * @return {String}\n */\n\n }, {\n key: 'type',\n get: function get$$1() {\n return this.settings.type;\n }\n /**\n * Gets value of the idle status.\n *\n * @return {Boolean}\n */\n\n }, {\n key: 'disabled',\n get: function get$$1() {\n return this._d;\n }\n /**\n * Sets value of the idle status.\n *\n * @return {Boolean}\n */\n ,\n set: function set$$1(status) {\n this._d = !!status;\n }\n }]);\n return Glide;\n}();\n\nfunction Run(Glide, Components, Events) {\n var Run = {\n /**\n * Initializes autorunning of the glide.\n *\n * @return {Void}\n */\n mount: function mount() {\n this._o = false;\n },\n\n /**\n * Makes glides running based on the passed moving schema.\n *\n * @param {String} move\n */\n make: function make(move) {\n var _this = this;\n\n if (!Glide.disabled) {\n Glide.disable();\n this.move = move;\n Events.emit('run.before', this.move);\n this.calculate();\n Events.emit('run', this.move);\n Components.Transition.after(function () {\n if (_this.isStart()) {\n Events.emit('run.start', _this.move);\n }\n\n if (_this.isEnd()) {\n Events.emit('run.end', _this.move);\n }\n\n if (_this.isOffset('<') || _this.isOffset('>')) {\n _this._o = false;\n Events.emit('run.offset', _this.move);\n }\n\n Events.emit('run.after', _this.move);\n Glide.enable();\n });\n }\n },\n\n /**\n * Calculates current index based on defined move.\n *\n * @return {Void}\n */\n calculate: function calculate() {\n var move = this.move,\n length = this.length;\n var steps = move.steps,\n direction = move.direction;\n var countableSteps = isNumber(toInt(steps)) && toInt(steps) !== 0;\n\n switch (direction) {\n case '>':\n if (steps === '>') {\n Glide.index = length;\n } else if (this.isEnd()) {\n if (!(Glide.isType('slider') && !Glide.settings.rewind)) {\n this._o = true;\n Glide.index = 0;\n }\n } else if (countableSteps) {\n Glide.index += Math.min(length - Glide.index, -toInt(steps));\n } else {\n Glide.index++;\n }\n\n break;\n\n case '<':\n if (steps === '<') {\n Glide.index = 0;\n } else if (this.isStart()) {\n if (!(Glide.isType('slider') && !Glide.settings.rewind)) {\n this._o = true;\n Glide.index = length;\n }\n } else if (countableSteps) {\n Glide.index -= Math.min(Glide.index, toInt(steps));\n } else {\n Glide.index--;\n }\n\n break;\n\n case '=':\n Glide.index = steps;\n break;\n\n default:\n warn('Invalid direction pattern [' + direction + steps + '] has been used');\n break;\n }\n },\n\n /**\n * Checks if we are on the first slide.\n *\n * @return {Boolean}\n */\n isStart: function isStart() {\n return Glide.index === 0;\n },\n\n /**\n * Checks if we are on the last slide.\n *\n * @return {Boolean}\n */\n isEnd: function isEnd() {\n return Glide.index === this.length;\n },\n\n /**\n * Checks if we are making a offset run.\n *\n * @param {String} direction\n * @return {Boolean}\n */\n isOffset: function isOffset(direction) {\n return this._o && this.move.direction === direction;\n }\n };\n glide_modular_esm_define(Run, 'move', {\n /**\n * Gets value of the move schema.\n *\n * @returns {Object}\n */\n get: function get() {\n return this._m;\n },\n\n /**\n * Sets value of the move schema.\n *\n * @returns {Object}\n */\n set: function set(value) {\n var step = value.substr(1);\n this._m = {\n direction: value.substr(0, 1),\n steps: step ? toInt(step) ? toInt(step) : step : 0\n };\n }\n });\n glide_modular_esm_define(Run, 'length', {\n /**\n * Gets value of the running distance based\n * on zero-indexing number of slides.\n *\n * @return {Number}\n */\n get: function get() {\n var settings = Glide.settings;\n var length = Components.Html.slides.length; // If the `bound` option is acitve, a maximum running distance should be\n // reduced by `perView` and `focusAt` settings. Running distance\n // should end before creating an empty space after instance.\n\n if (Glide.isType('slider') && settings.focusAt !== 'center' && settings.bound) {\n return length - 1 - (toInt(settings.perView) - 1) + toInt(settings.focusAt);\n }\n\n return length - 1;\n }\n });\n glide_modular_esm_define(Run, 'offset', {\n /**\n * Gets status of the offsetting flag.\n *\n * @return {Boolean}\n */\n get: function get() {\n return this._o;\n }\n });\n return Run;\n}\n/**\n * Returns a current time.\n *\n * @return {Number}\n */\n\n\nfunction now() {\n return new Date().getTime();\n}\n/**\n * Returns a function, that, when invoked, will only be triggered\n * at most once during a given window of time.\n *\n * @param {Function} func\n * @param {Number} wait\n * @param {Object=} options\n * @return {Function}\n *\n * @see https://github.com/jashkenas/underscore\n */\n\n\nfunction throttle(func, wait, options) {\n var timeout = void 0,\n context = void 0,\n args = void 0,\n result = void 0;\n var previous = 0;\n if (!options) options = {};\n\n var later = function later() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function throttled() {\n var at = now();\n if (!previous && options.leading === false) previous = at;\n var remaining = wait - (at - previous);\n context = this;\n args = arguments;\n\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n\n previous = at;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n\n return result;\n };\n\n throttled.cancel = function () {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n}\n\nvar MARGIN_TYPE = {\n ltr: ['marginLeft', 'marginRight'],\n rtl: ['marginRight', 'marginLeft']\n};\n\nfunction Gaps(Glide, Components, Events) {\n var Gaps = {\n /**\n * Applies gaps between slides. First and last\n * slides do not receive it's edge margins.\n *\n * @param {HTMLCollection} slides\n * @return {Void}\n */\n apply: function apply(slides) {\n for (var i = 0, len = slides.length; i < len; i++) {\n var style = slides[i].style;\n var direction = Components.Direction.value;\n\n if (i !== 0) {\n style[MARGIN_TYPE[direction][0]] = this.value / 2 + 'px';\n } else {\n style[MARGIN_TYPE[direction][0]] = '';\n }\n\n if (i !== slides.length - 1) {\n style[MARGIN_TYPE[direction][1]] = this.value / 2 + 'px';\n } else {\n style[MARGIN_TYPE[direction][1]] = '';\n }\n }\n },\n\n /**\n * Removes gaps from the slides.\n *\n * @param {HTMLCollection} slides\n * @returns {Void}\n */\n remove: function remove(slides) {\n for (var i = 0, len = slides.length; i < len; i++) {\n var style = slides[i].style;\n style.marginLeft = '';\n style.marginRight = '';\n }\n }\n };\n glide_modular_esm_define(Gaps, 'value', {\n /**\n * Gets value of the gap.\n *\n * @returns {Number}\n */\n get: function get() {\n return toInt(Glide.settings.gap);\n }\n });\n glide_modular_esm_define(Gaps, 'grow', {\n /**\n * Gets additional dimentions value caused by gaps.\n * Used to increase width of the slides wrapper.\n *\n * @returns {Number}\n */\n get: function get() {\n return Gaps.value * (Components.Sizes.length - 1);\n }\n });\n glide_modular_esm_define(Gaps, 'reductor', {\n /**\n * Gets reduction value caused by gaps.\n * Used to subtract width of the slides.\n *\n * @returns {Number}\n */\n get: function get() {\n var perView = Glide.settings.perView;\n return Gaps.value * (perView - 1) / perView;\n }\n });\n /**\n * Apply calculated gaps:\n * - after building, so slides (including clones) will receive proper margins\n * - on updating via API, to recalculate gaps with new options\n */\n\n Events.on(['build.after', 'update'], throttle(function () {\n Gaps.apply(Components.Html.wrapper.children);\n }, 30));\n /**\n * Remove gaps:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Gaps.remove(Components.Html.wrapper.children);\n });\n return Gaps;\n}\n/**\n * Finds siblings nodes of the passed node.\n *\n * @param {Element} node\n * @return {Array}\n */\n\n\nfunction siblings(node) {\n if (node && node.parentNode) {\n var n = node.parentNode.firstChild;\n var matched = [];\n\n for (; n; n = n.nextSibling) {\n if (n.nodeType === 1 && n !== node) {\n matched.push(n);\n }\n }\n\n return matched;\n }\n\n return [];\n}\n/**\n * Checks if passed node exist and is a valid element.\n *\n * @param {Element} node\n * @return {Boolean}\n */\n\n\nfunction exist(node) {\n if (node && node instanceof window.HTMLElement) {\n return true;\n }\n\n return false;\n}\n\nvar TRACK_SELECTOR = '[data-glide-el=\"track\"]';\n\nfunction Html(Glide, Components) {\n var Html = {\n /**\n * Setup slider HTML nodes.\n *\n * @param {Glide} glide\n */\n mount: function mount() {\n this.root = Glide.selector;\n this.track = this.root.querySelector(TRACK_SELECTOR);\n this.slides = Array.prototype.slice.call(this.wrapper.children).filter(function (slide) {\n return !slide.classList.contains(Glide.settings.classes.cloneSlide);\n });\n }\n };\n glide_modular_esm_define(Html, 'root', {\n /**\n * Gets node of the glide main element.\n *\n * @return {Object}\n */\n get: function get() {\n return Html._r;\n },\n\n /**\n * Sets node of the glide main element.\n *\n * @return {Object}\n */\n set: function set(r) {\n if (isString(r)) {\n r = top.document.querySelector(r);\n }\n\n Html._r = r;\n /**\n * Removed exist validation\n */\n // if (exist(r)) {\n // Html._r = r;\n // } else {\n // warn('Root element must be a existing Html node');\n // }\n }\n });\n glide_modular_esm_define(Html, 'track', {\n /**\n * Gets node of the glide track with slides.\n *\n * @return {Object}\n */\n get: function get() {\n return Html._t;\n },\n\n /**\n * Sets node of the glide track with slides.\n *\n * @return {Object}\n */\n set: function set(t) {\n Html._t = t;\n /**\n * Removed exist validation\n */\n // if (exist(t)) {\n // Html._t = t;\n // } else {\n // warn('Could not find track element. Please use ' + TRACK_SELECTOR + ' attribute.');\n // }\n }\n });\n glide_modular_esm_define(Html, 'wrapper', {\n /**\n * Gets node of the slides wrapper.\n *\n * @return {Object}\n */\n get: function get() {\n return Html.track.children[0];\n }\n });\n return Html;\n}\n\nfunction Peek(Glide, Components, Events) {\n var Peek = {\n /**\n * Setups how much to peek based on settings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.value = Glide.settings.peek;\n }\n };\n glide_modular_esm_define(Peek, 'value', {\n /**\n * Gets value of the peek.\n *\n * @returns {Number|Object}\n */\n get: function get() {\n return Peek._v;\n },\n\n /**\n * Sets value of the peek.\n *\n * @param {Number|Object} value\n * @return {Void}\n */\n set: function set(value) {\n if (isObject(value)) {\n value.before = toInt(value.before);\n value.after = toInt(value.after);\n } else {\n value = toInt(value);\n }\n\n Peek._v = value;\n }\n });\n glide_modular_esm_define(Peek, 'reductor', {\n /**\n * Gets reduction value caused by peek.\n *\n * @returns {Number}\n */\n get: function get() {\n var value = Peek.value;\n var perView = Glide.settings.perView;\n\n if (isObject(value)) {\n return value.before / perView + value.after / perView;\n }\n\n return value * 2 / perView;\n }\n });\n /**\n * Recalculate peeking sizes on:\n * - when resizing window to update to proper percents\n */\n\n Events.on(['resize', 'update'], function () {\n Peek.mount();\n });\n return Peek;\n}\n\nfunction Move(Glide, Components, Events) {\n var Move = {\n /**\n * Constructs move component.\n *\n * @returns {Void}\n */\n mount: function mount() {\n this._o = 0;\n },\n\n /**\n * Calculates a movement value based on passed offset and currently active index.\n *\n * @param {Number} offset\n * @return {Void}\n */\n make: function make() {\n var _this = this;\n\n var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n this.offset = offset;\n Events.emit('move', {\n movement: this.value\n });\n Components.Transition.after(function () {\n Events.emit('move.after', {\n movement: _this.value\n });\n });\n }\n };\n glide_modular_esm_define(Move, 'offset', {\n /**\n * Gets an offset value used to modify current translate.\n *\n * @return {Object}\n */\n get: function get() {\n return Move._o;\n },\n\n /**\n * Sets an offset value used to modify current translate.\n *\n * @return {Object}\n */\n set: function set(value) {\n Move._o = !isUndefined(value) ? toInt(value) : 0;\n }\n });\n glide_modular_esm_define(Move, 'translate', {\n /**\n * Gets a raw movement value.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Sizes.slideWidth * Glide.index;\n }\n });\n glide_modular_esm_define(Move, 'value', {\n /**\n * Gets an actual movement value corrected by offset.\n *\n * @return {Number}\n */\n get: function get() {\n var offset = this.offset;\n var translate = this.translate;\n\n if (Components.Direction.is('rtl')) {\n return translate + offset;\n }\n\n return translate - offset;\n }\n });\n /**\n * Make movement to proper slide on:\n * - before build, so glide will start at `startAt` index\n * - on each standard run to move to newly calculated index\n */\n\n Events.on(['build.before', 'run'], function () {\n Move.make();\n });\n return Move;\n}\n\nfunction Sizes(Glide, Components, Events) {\n var Sizes = {\n /**\n * Setups dimentions of slides.\n *\n * @return {Void}\n */\n setupSlides: function setupSlides() {\n var width = this.slideWidth + 'px';\n var slides = Components.Html.slides;\n\n for (var i = 0; i < slides.length; i++) {\n slides[i].style.width = width;\n }\n },\n\n /**\n * Setups dimentions of slides wrapper.\n *\n * @return {Void}\n */\n setupWrapper: function setupWrapper(dimention) {\n Components.Html.wrapper.style.width = this.wrapperSize + 'px';\n },\n\n /**\n * Removes applied styles from HTML elements.\n *\n * @returns {Void}\n */\n remove: function remove() {\n var slides = Components.Html.slides;\n\n for (var i = 0; i < slides.length; i++) {\n slides[i].style.width = '';\n }\n\n Components.Html.wrapper.style.width = '';\n }\n };\n glide_modular_esm_define(Sizes, 'length', {\n /**\n * Gets count number of the slides.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Html.slides.length;\n }\n });\n glide_modular_esm_define(Sizes, 'width', {\n /**\n * Gets width value of the glide.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Html.root.offsetWidth;\n }\n });\n glide_modular_esm_define(Sizes, 'wrapperSize', {\n /**\n * Gets size of the slides wrapper.\n *\n * @return {Number}\n */\n get: function get() {\n return Sizes.slideWidth * Sizes.length + Components.Gaps.grow + Components.Clones.grow;\n }\n });\n glide_modular_esm_define(Sizes, 'slideWidth', {\n /**\n * Gets width value of the single slide.\n *\n * @return {Number}\n */\n get: function get() {\n return Sizes.width / Glide.settings.perView - Components.Peek.reductor - Components.Gaps.reductor;\n }\n });\n /**\n * Apply calculated glide's dimensions:\n * - before building, so other dimentions (e.g. translate) will be calculated propertly\n * - when resizing window to recalculate sildes dimensions\n * - on updating via API, to calculate dimensions based on new options\n */\n\n Events.on(['build.before', 'resize', 'update'], function () {\n Sizes.setupSlides();\n Sizes.setupWrapper();\n });\n /**\n * Remove calculated glide's dimensions:\n * - on destoting to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Sizes.remove();\n });\n return Sizes;\n}\n\nfunction Build(Glide, Components, Events) {\n var Build = {\n /**\n * Init glide building. Adds classes, sets\n * dimensions and setups initial state.\n *\n * @return {Void}\n */\n mount: function mount() {\n Events.emit('build.before');\n this.typeClass();\n this.activeClass();\n Events.emit('build.after');\n },\n\n /**\n * Adds `type` class to the glide element.\n *\n * @return {Void}\n */\n typeClass: function typeClass() {\n Components.Html.root.classList.add(Glide.settings.classes[Glide.settings.type]);\n },\n\n /**\n * Sets active class to current slide.\n *\n * @return {Void}\n */\n activeClass: function activeClass() {\n var classes = Glide.settings.classes;\n var slide = Components.Html.slides[Glide.index];\n\n if (slide) {\n slide.classList.add(classes.activeSlide);\n siblings(slide).forEach(function (sibling) {\n sibling.classList.remove(classes.activeSlide);\n });\n }\n },\n\n /**\n * Removes HTML classes applied at building.\n *\n * @return {Void}\n */\n removeClasses: function removeClasses() {\n var classes = Glide.settings.classes;\n Components.Html.root.classList.remove(classes[Glide.settings.type]);\n Components.Html.slides.forEach(function (sibling) {\n sibling.classList.remove(classes.activeSlide);\n });\n }\n };\n /**\n * Clear building classes:\n * - on destroying to bring HTML to its initial state\n * - on updating to remove classes before remounting component\n */\n\n Events.on(['destroy', 'update'], function () {\n Build.removeClasses();\n });\n /**\n * Remount component:\n * - on resizing of the window to calculate new dimentions\n * - on updating settings via API\n */\n\n Events.on(['resize', 'update'], function () {\n Build.mount();\n });\n /**\n * Swap active class of current slide:\n * - after each move to the new index\n */\n\n Events.on('move.after', function () {\n Build.activeClass();\n });\n return Build;\n}\n\nfunction Clones(Glide, Components, Events) {\n var Clones = {\n /**\n * Create pattern map and collect slides to be cloned.\n */\n mount: function mount() {\n this.items = [];\n\n if (Glide.isType('carousel')) {\n this.items = this.collect();\n }\n },\n\n /**\n * Collect clones with pattern.\n *\n * @return {Void}\n */\n collect: function collect() {\n var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var slides = Components.Html.slides;\n var _Glide$settings = Glide.settings,\n perView = _Glide$settings.perView,\n classes = _Glide$settings.classes;\n var peekIncrementer = +!!Glide.settings.peek;\n var part = perView + peekIncrementer;\n var start = slides.slice(0, part);\n var end = slides.slice(-part);\n\n for (var r = 0; r < Math.max(1, Math.floor(perView / slides.length)); r++) {\n for (var i = 0; i < start.length; i++) {\n var clone = start[i].cloneNode(true);\n clone.classList.add(classes.cloneSlide);\n items.push(clone);\n }\n\n for (var _i = 0; _i < end.length; _i++) {\n var _clone = end[_i].cloneNode(true);\n\n _clone.classList.add(classes.cloneSlide);\n\n items.unshift(_clone);\n }\n }\n\n return items;\n },\n\n /**\n * Append cloned slides with generated pattern.\n *\n * @return {Void}\n */\n append: function append() {\n var items = this.items;\n var _Components$Html = Components.Html,\n wrapper = _Components$Html.wrapper,\n slides = _Components$Html.slides;\n var half = Math.floor(items.length / 2);\n var prepend = items.slice(0, half).reverse();\n var append = items.slice(half, items.length);\n var width = Components.Sizes.slideWidth + 'px';\n\n for (var i = 0; i < append.length; i++) {\n wrapper.appendChild(append[i]);\n }\n\n for (var _i2 = 0; _i2 < prepend.length; _i2++) {\n wrapper.insertBefore(prepend[_i2], slides[0]);\n }\n\n for (var _i3 = 0; _i3 < items.length; _i3++) {\n items[_i3].style.width = width;\n }\n },\n\n /**\n * Remove all cloned slides.\n *\n * @return {Void}\n */\n remove: function remove() {\n var items = this.items;\n\n for (var i = 0; i < items.length; i++) {\n Components.Html.wrapper.removeChild(items[i]);\n }\n }\n };\n glide_modular_esm_define(Clones, 'grow', {\n /**\n * Gets additional dimentions value caused by clones.\n *\n * @return {Number}\n */\n get: function get() {\n return (Components.Sizes.slideWidth + Components.Gaps.value) * Clones.items.length;\n }\n });\n /**\n * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n\n Events.on('update', function () {\n Clones.remove();\n Clones.mount();\n Clones.append();\n });\n /**\n * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n\n Events.on('build.before', function () {\n if (Glide.isType('carousel')) {\n Clones.append();\n }\n });\n /**\n * Remove clones HTMLElements:\n * - on destroying, to bring HTML to its initial state\n */\n\n Events.on('destroy', function () {\n Clones.remove();\n });\n return Clones;\n}\n\nvar EventsBinder = function () {\n /**\n * Construct a EventsBinder instance.\n */\n function EventsBinder() {\n var listeners = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n classCallCheck(this, EventsBinder);\n this.listeners = listeners;\n }\n /**\n * Adds events listeners to arrows HTML elements.\n *\n * @param {String|Array} events\n * @param {Element|Window|Document} el\n * @param {Function} closure\n * @param {Boolean|Object} capture\n * @return {Void}\n */\n\n\n createClass(EventsBinder, [{\n key: 'on',\n value: function on(events, el, closure) {\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (isString(events)) {\n events = [events];\n }\n\n for (var i = 0; i < events.length; i++) {\n this.listeners[events[i]] = closure;\n el.addEventListener(events[i], this.listeners[events[i]], capture);\n }\n }\n /**\n * Removes event listeners from arrows HTML elements.\n *\n * @param {String|Array} events\n * @param {Element|Window|Document} el\n * @param {Boolean|Object} capture\n * @return {Void}\n */\n\n }, {\n key: 'off',\n value: function off(events, el) {\n var capture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n if (isString(events)) {\n events = [events];\n }\n\n for (var i = 0; i < events.length; i++) {\n el.removeEventListener(events[i], this.listeners[events[i]], capture);\n }\n }\n /**\n * Destroy collected listeners.\n *\n * @returns {Void}\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n delete this.listeners;\n }\n }]);\n return EventsBinder;\n}();\n\nfunction Resize(Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Resize = {\n /**\n * Initializes window bindings.\n */\n mount: function mount() {\n this.bind();\n },\n\n /**\n * Binds `rezsize` listener to the window.\n * It's a costly event, so we are debouncing it.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('resize', window, throttle(function () {\n Events.emit('resize');\n }, Glide.settings.throttle));\n },\n\n /**\n * Unbinds listeners from the window.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('resize', window);\n }\n };\n /**\n * Remove bindings from window:\n * - on destroying, to remove added EventListener\n */\n\n Events.on('destroy', function () {\n Resize.unbind();\n Binder.destroy();\n });\n return Resize;\n}\n\nvar VALID_DIRECTIONS = ['ltr', 'rtl'];\nvar FLIPED_MOVEMENTS = {\n '>': '<',\n '<': '>',\n '=': '='\n};\n\nfunction Direction(Glide, Components, Events) {\n var Direction = {\n /**\n * Setups gap value based on settings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.value = Glide.settings.direction;\n },\n\n /**\n * Resolves pattern based on direction value\n *\n * @param {String} pattern\n * @returns {String}\n */\n resolve: function resolve(pattern) {\n var token = pattern.slice(0, 1);\n\n if (this.is('rtl')) {\n return pattern.split(token).join(FLIPED_MOVEMENTS[token]);\n }\n\n return pattern;\n },\n\n /**\n * Checks value of direction mode.\n *\n * @param {String} direction\n * @returns {Boolean}\n */\n is: function is(direction) {\n return this.value === direction;\n },\n\n /**\n * Applies direction class to the root HTML element.\n *\n * @return {Void}\n */\n addClass: function addClass() {\n Components.Html.root.classList.add(Glide.settings.classes.direction[this.value]);\n },\n\n /**\n * Removes direction class from the root HTML element.\n *\n * @return {Void}\n */\n removeClass: function removeClass() {\n Components.Html.root.classList.remove(Glide.settings.classes.direction[this.value]);\n }\n };\n glide_modular_esm_define(Direction, 'value', {\n /**\n * Gets value of the direction.\n *\n * @returns {Number}\n */\n get: function get() {\n return Direction._v;\n },\n\n /**\n * Sets value of the direction.\n *\n * @param {String} value\n * @return {Void}\n */\n set: function set(value) {\n if (VALID_DIRECTIONS.indexOf(value) > -1) {\n Direction._v = value;\n } else {\n warn('Direction value must be `ltr` or `rtl`');\n }\n }\n });\n /**\n * Clear direction class:\n * - on destroy to bring HTML to its initial state\n * - on update to remove class before reappling bellow\n */\n\n Events.on(['destroy', 'update'], function () {\n Direction.removeClass();\n });\n /**\n * Remount component:\n * - on update to reflect changes in direction value\n */\n\n Events.on('update', function () {\n Direction.mount();\n });\n /**\n * Apply direction class:\n * - before building to apply class for the first time\n * - on updating to reapply direction class that may changed\n */\n\n Events.on(['build.before', 'update'], function () {\n Direction.addClass();\n });\n return Direction;\n}\n/**\n * Reflects value of glide movement.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\n\nfunction Rtl(Glide, Components) {\n return {\n /**\n * Negates the passed translate if glide is in RTL option.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n if (Components.Direction.is('rtl')) {\n return -translate;\n }\n\n return translate;\n }\n };\n}\n/**\n * Updates glide movement with a `gap` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\n\nfunction Gap(Glide, Components) {\n return {\n /**\n * Modifies passed translate value with number in the `gap` settings.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n return translate + Components.Gaps.value * Glide.index;\n }\n };\n}\n/**\n * Updates glide movement with width of additional clones width.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\n\nfunction Grow(Glide, Components) {\n return {\n /**\n * Adds to the passed translate width of the half of clones.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n return translate + Components.Clones.grow / 2;\n }\n };\n}\n/**\n * Updates glide movement with a `peek` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\n\nfunction Peeking(Glide, Components) {\n return {\n /**\n * Modifies passed translate value with a `peek` setting.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n if (Glide.settings.focusAt >= 0) {\n var peek = Components.Peek.value;\n\n if (isObject(peek)) {\n return translate - peek.before;\n }\n\n return translate - peek;\n }\n\n return translate;\n }\n };\n}\n/**\n * Updates glide movement with a `focusAt` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\n\nfunction Focusing(Glide, Components) {\n return {\n /**\n * Modifies passed translate value with index in the `focusAt` setting.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n var gap = Components.Gaps.value;\n var width = Components.Sizes.width;\n var focusAt = Glide.settings.focusAt;\n var slideWidth = Components.Sizes.slideWidth;\n\n if (focusAt === 'center') {\n return translate - (width / 2 - slideWidth / 2);\n }\n\n return translate - slideWidth * focusAt - gap * focusAt;\n }\n };\n}\n/**\n * Applies diffrent transformers on translate value.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\n\nfunction mutator(Glide, Components, Events) {\n /**\n * Merge instance transformers with collection of default transformers.\n * It's important that the Rtl component be last on the list,\n * so it reflects all previous transformations.\n *\n * @type {Array}\n */\n var TRANSFORMERS = [Gap, Grow, Peeking, Focusing].concat(Glide._t, [Rtl]);\n return {\n /**\n * Piplines translate value with registered transformers.\n *\n * @param {Number} translate\n * @return {Number}\n */\n mutate: function mutate(translate) {\n for (var i = 0; i < TRANSFORMERS.length; i++) {\n var transformer = TRANSFORMERS[i];\n\n if (isFunction(transformer) && isFunction(transformer().modify)) {\n translate = transformer(Glide, Components, Events).modify(translate);\n } else {\n warn('Transformer should be a function that returns an object with `modify()` method');\n }\n }\n\n return translate;\n }\n };\n}\n\nfunction Translate(Glide, Components, Events) {\n var Translate = {\n /**\n * Sets value of translate on HTML element.\n *\n * @param {Number} value\n * @return {Void}\n */\n set: function set(value) {\n var transform = mutator(Glide, Components).mutate(value);\n Components.Html.wrapper.style.transform = 'translate3d(' + -1 * transform + 'px, 0px, 0px)';\n },\n\n /**\n * Removes value of translate from HTML element.\n *\n * @return {Void}\n */\n remove: function remove() {\n Components.Html.wrapper.style.transform = '';\n }\n };\n /**\n * Set new translate value:\n * - on move to reflect index change\n * - on updating via API to reflect possible changes in options\n */\n\n Events.on('move', function (context) {\n var gap = Components.Gaps.value;\n var length = Components.Sizes.length;\n var width = Components.Sizes.slideWidth;\n\n if (Glide.isType('carousel') && Components.Run.isOffset('<')) {\n Components.Transition.after(function () {\n Events.emit('translate.jump');\n Translate.set(width * (length - 1));\n });\n return Translate.set(-width - gap * length);\n }\n\n if (Glide.isType('carousel') && Components.Run.isOffset('>')) {\n Components.Transition.after(function () {\n Events.emit('translate.jump');\n Translate.set(0);\n });\n return Translate.set(width * length + gap * length);\n }\n\n return Translate.set(context.movement);\n });\n /**\n * Remove translate:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Translate.remove();\n });\n return Translate;\n}\n\nfunction Transition(Glide, Components, Events) {\n /**\n * Holds inactivity status of transition.\n * When true transition is not applied.\n *\n * @type {Boolean}\n */\n var disabled = false;\n var Transition = {\n /**\n * Composes string of the CSS transition.\n *\n * @param {String} property\n * @return {String}\n */\n compose: function compose(property) {\n var settings = Glide.settings;\n\n if (!disabled) {\n return property + ' ' + this.duration + 'ms ' + settings.animationTimingFunc;\n }\n\n return property + ' 0ms ' + settings.animationTimingFunc;\n },\n\n /**\n * Sets value of transition on HTML element.\n *\n * @param {String=} property\n * @return {Void}\n */\n set: function set() {\n var property = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform';\n Components.Html.wrapper.style.transition = this.compose(property);\n },\n\n /**\n * Removes value of transition from HTML element.\n *\n * @return {Void}\n */\n remove: function remove() {\n Components.Html.wrapper.style.transition = '';\n },\n\n /**\n * Runs callback after animation.\n *\n * @param {Function} callback\n * @return {Void}\n */\n after: function after(callback) {\n setTimeout(function () {\n callback();\n }, this.duration);\n },\n\n /**\n * Enable transition.\n *\n * @return {Void}\n */\n enable: function enable() {\n disabled = false;\n this.set();\n },\n\n /**\n * Disable transition.\n *\n * @return {Void}\n */\n disable: function disable() {\n disabled = true;\n this.set();\n }\n };\n glide_modular_esm_define(Transition, 'duration', {\n /**\n * Gets duration of the transition based\n * on currently running animation type.\n *\n * @return {Number}\n */\n get: function get() {\n var settings = Glide.settings;\n\n if (Glide.isType('slider') && Components.Run.offset) {\n return settings.rewindDuration;\n }\n\n return settings.animationDuration;\n }\n });\n /**\n * Set transition `style` value:\n * - on each moving, because it may be cleared by offset move\n */\n\n Events.on('move', function () {\n Transition.set();\n });\n /**\n * Disable transition:\n * - before initial build to avoid transitioning from `0` to `startAt` index\n * - while resizing window and recalculating dimentions\n * - on jumping from offset transition at start and end edges in `carousel` type\n */\n\n Events.on(['build.before', 'resize', 'translate.jump'], function () {\n Transition.disable();\n });\n /**\n * Enable transition:\n * - on each running, because it may be disabled by offset move\n */\n\n Events.on('run', function () {\n Transition.enable();\n });\n /**\n * Remove transition:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Transition.remove();\n });\n return Transition;\n}\n/**\n * Test via a getter in the options object to see\n * if the passive property is accessed.\n *\n * @see https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n */\n\n\nvar supportsPassive = false;\n\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n window.addEventListener('testPassive', null, opts);\n window.removeEventListener('testPassive', null, opts);\n} catch (e) {}\n\nvar supportsPassive$1 = supportsPassive;\nvar START_EVENTS = ['touchstart', 'mousedown'];\nvar MOVE_EVENTS = ['touchmove', 'mousemove'];\nvar END_EVENTS = ['touchend', 'touchcancel', 'mouseup', 'mouseleave'];\nvar MOUSE_EVENTS = ['mousedown', 'mousemove', 'mouseup', 'mouseleave'];\n\nfunction swipe(Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var swipeSin = 0;\n var swipeStartX = 0;\n var swipeStartY = 0;\n var disabled = false;\n var capture = supportsPassive$1 ? {\n passive: true\n } : false;\n var Swipe = {\n /**\n * Initializes swipe bindings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.bindSwipeStart();\n },\n\n /**\n * Handler for `swipestart` event. Calculates entry points of the user's tap.\n *\n * @param {Object} event\n * @return {Void}\n */\n start: function start(event) {\n if (!disabled && !Glide.disabled) {\n this.disable();\n var swipe = this.touches(event);\n swipeSin = null;\n swipeStartX = toInt(swipe.pageX);\n swipeStartY = toInt(swipe.pageY);\n this.bindSwipeMove();\n this.bindSwipeEnd();\n Events.emit('swipe.start');\n }\n },\n\n /**\n * Handler for `swipemove` event. Calculates user's tap angle and distance.\n *\n * @param {Object} event\n */\n move: function move(event) {\n if (!Glide.disabled) {\n var _Glide$settings = Glide.settings,\n touchAngle = _Glide$settings.touchAngle,\n touchRatio = _Glide$settings.touchRatio,\n classes = _Glide$settings.classes;\n var swipe = this.touches(event);\n var subExSx = toInt(swipe.pageX) - swipeStartX;\n var subEySy = toInt(swipe.pageY) - swipeStartY;\n var powEX = Math.abs(subExSx << 2);\n var powEY = Math.abs(subEySy << 2);\n var swipeHypotenuse = Math.sqrt(powEX + powEY);\n var swipeCathetus = Math.sqrt(powEY);\n swipeSin = Math.asin(swipeCathetus / swipeHypotenuse);\n\n if (swipeSin * 180 / Math.PI < touchAngle) {\n event.stopPropagation();\n Components.Move.make(subExSx * toFloat(touchRatio));\n Components.Html.root.classList.add(classes.dragging);\n Events.emit('swipe.move');\n } else {\n return false;\n }\n }\n },\n\n /**\n * Handler for `swipeend` event. Finitializes user's tap and decides about glide move.\n *\n * @param {Object} event\n * @return {Void}\n */\n end: function end(event) {\n if (!Glide.disabled) {\n var settings = Glide.settings;\n var swipe = this.touches(event);\n var threshold = this.threshold(event);\n var swipeDistance = swipe.pageX - swipeStartX;\n var swipeDeg = swipeSin * 180 / Math.PI;\n var steps = Math.round(swipeDistance / Components.Sizes.slideWidth);\n this.enable();\n\n if (swipeDistance > threshold && swipeDeg < settings.touchAngle) {\n // While swipe is positive and greater than threshold move backward.\n if (settings.perTouch) {\n steps = Math.min(steps, toInt(settings.perTouch));\n }\n\n if (Components.Direction.is('rtl')) {\n steps = -steps;\n }\n\n Components.Run.make(Components.Direction.resolve('<' + steps));\n } else if (swipeDistance < -threshold && swipeDeg < settings.touchAngle) {\n // While swipe is negative and lower than negative threshold move forward.\n if (settings.perTouch) {\n steps = Math.max(steps, -toInt(settings.perTouch));\n }\n\n if (Components.Direction.is('rtl')) {\n steps = -steps;\n }\n\n Components.Run.make(Components.Direction.resolve('>' + steps));\n } else {\n // While swipe don't reach distance apply previous transform.\n Components.Move.make();\n }\n\n Components.Html.root.classList.remove(settings.classes.dragging);\n this.unbindSwipeMove();\n this.unbindSwipeEnd();\n Events.emit('swipe.end');\n }\n },\n\n /**\n * Binds swipe's starting event.\n *\n * @return {Void}\n */\n bindSwipeStart: function bindSwipeStart() {\n var _this = this;\n\n var settings = Glide.settings;\n\n if (settings.swipeThreshold) {\n Binder.on(START_EVENTS[0], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\n }\n\n if (settings.dragThreshold) {\n Binder.on(START_EVENTS[1], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\n }\n },\n\n /**\n * Unbinds swipe's starting event.\n *\n * @return {Void}\n */\n unbindSwipeStart: function unbindSwipeStart() {\n Binder.off(START_EVENTS[0], Components.Html.wrapper, capture);\n Binder.off(START_EVENTS[1], Components.Html.wrapper, capture);\n },\n\n /**\n * Binds swipe's moving event.\n *\n * @return {Void}\n */\n bindSwipeMove: function bindSwipeMove() {\n var _this2 = this;\n\n Binder.on(MOVE_EVENTS, Components.Html.wrapper, throttle(function (event) {\n _this2.move(event);\n }, Glide.settings.throttle), capture);\n },\n\n /**\n * Unbinds swipe's moving event.\n *\n * @return {Void}\n */\n unbindSwipeMove: function unbindSwipeMove() {\n Binder.off(MOVE_EVENTS, Components.Html.wrapper, capture);\n },\n\n /**\n * Binds swipe's ending event.\n *\n * @return {Void}\n */\n bindSwipeEnd: function bindSwipeEnd() {\n var _this3 = this;\n\n Binder.on(END_EVENTS, Components.Html.wrapper, function (event) {\n _this3.end(event);\n });\n },\n\n /**\n * Unbinds swipe's ending event.\n *\n * @return {Void}\n */\n unbindSwipeEnd: function unbindSwipeEnd() {\n Binder.off(END_EVENTS, Components.Html.wrapper);\n },\n\n /**\n * Normalizes event touches points accorting to different types.\n *\n * @param {Object} event\n */\n touches: function touches(event) {\n if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n return event;\n }\n\n return event.touches[0] || event.changedTouches[0];\n },\n\n /**\n * Gets value of minimum swipe distance settings based on event type.\n *\n * @return {Number}\n */\n threshold: function threshold(event) {\n var settings = Glide.settings;\n\n if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n return settings.dragThreshold;\n }\n\n return settings.swipeThreshold;\n },\n\n /**\n * Enables swipe event.\n *\n * @return {self}\n */\n enable: function enable() {\n disabled = false;\n Components.Transition.enable();\n return this;\n },\n\n /**\n * Disables swipe event.\n *\n * @return {self}\n */\n disable: function disable() {\n disabled = true;\n Components.Transition.disable();\n return this;\n }\n };\n /**\n * Add component class:\n * - after initial building\n */\n\n Events.on('build.after', function () {\n Components.Html.root.classList.add(Glide.settings.classes.swipeable);\n });\n /**\n * Remove swiping bindings:\n * - on destroying, to remove added EventListeners\n */\n\n Events.on('destroy', function () {\n Swipe.unbindSwipeStart();\n Swipe.unbindSwipeMove();\n Swipe.unbindSwipeEnd();\n Binder.destroy();\n });\n return Swipe;\n}\n\nfunction glide_modular_esm_images(Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Images = {\n /**\n * Binds listener to glide wrapper.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.bind();\n },\n\n /**\n * Binds `dragstart` event on wrapper to prevent dragging images.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('dragstart', Components.Html.wrapper, this.dragstart);\n },\n\n /**\n * Unbinds `dragstart` event on wrapper.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('dragstart', Components.Html.wrapper);\n },\n\n /**\n * Event handler. Prevents dragging.\n *\n * @return {Void}\n */\n dragstart: function dragstart(event) {\n event.preventDefault();\n }\n };\n /**\n * Remove bindings from images:\n * - on destroying, to remove added EventListeners\n */\n\n Events.on('destroy', function () {\n Images.unbind();\n Binder.destroy();\n });\n return Images;\n}\n\nfunction glide_modular_esm_anchors(Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n /**\n * Holds detaching status of anchors.\n * Prevents detaching of already detached anchors.\n *\n * @private\n * @type {Boolean}\n */\n\n var detached = false;\n /**\n * Holds preventing status of anchors.\n * If `true` redirection after click will be disabled.\n *\n * @private\n * @type {Boolean}\n */\n\n var prevented = false;\n var Anchors = {\n /**\n * Setups a initial state of anchors component.\n *\n * @returns {Void}\n */\n mount: function mount() {\n /**\n * Holds collection of anchors elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n this._a = Components.Html.wrapper.querySelectorAll('a');\n this.bind();\n },\n\n /**\n * Binds events to anchors inside a track.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('click', Components.Html.wrapper, this.click);\n },\n\n /**\n * Unbinds events attached to anchors inside a track.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('click', Components.Html.wrapper);\n },\n\n /**\n * Handler for click event. Prevents clicks when glide is in `prevent` status.\n *\n * @param {Object} event\n * @return {Void}\n */\n click: function click(event) {\n if (prevented) {\n event.stopPropagation();\n event.preventDefault();\n }\n },\n\n /**\n * Detaches anchors click event inside glide.\n *\n * @return {self}\n */\n detach: function detach() {\n prevented = true;\n\n if (!detached) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].draggable = false;\n this.items[i].setAttribute('data-href', this.items[i].getAttribute('href'));\n this.items[i].removeAttribute('href');\n }\n\n detached = true;\n }\n\n return this;\n },\n\n /**\n * Attaches anchors click events inside glide.\n *\n * @return {self}\n */\n attach: function attach() {\n prevented = false;\n\n if (detached) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].draggable = true;\n this.items[i].setAttribute('href', this.items[i].getAttribute('data-href'));\n }\n\n detached = false;\n }\n\n return this;\n }\n };\n glide_modular_esm_define(Anchors, 'items', {\n /**\n * Gets collection of the arrows HTML elements.\n *\n * @return {HTMLElement[]}\n */\n get: function get() {\n return Anchors._a;\n }\n });\n /**\n * Detach anchors inside slides:\n * - on swiping, so they won't redirect to its `href` attributes\n */\n\n Events.on('swipe.move', function () {\n Anchors.detach();\n });\n /**\n * Attach anchors inside slides:\n * - after swiping and transitions ends, so they can redirect after click again\n */\n\n Events.on('swipe.end', function () {\n Components.Transition.after(function () {\n Anchors.attach();\n });\n });\n /**\n * Unbind anchors inside slides:\n * - on destroying, to bring anchors to its initial state\n */\n\n Events.on('destroy', function () {\n Anchors.attach();\n Anchors.unbind();\n Binder.destroy();\n });\n return Anchors;\n}\n\nvar NAV_SELECTOR = '[data-glide-el=\"controls[nav]\"]';\nvar CONTROLS_SELECTOR = '[data-glide-el^=\"controls\"]';\n\nfunction controls(Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var capture = supportsPassive$1 ? {\n passive: true\n } : false;\n var Controls = {\n /**\n * Inits arrows. Binds events listeners\n * to the arrows HTML elements.\n *\n * @return {Void}\n */\n mount: function mount() {\n /**\n * Collection of navigation HTML elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n this._n = Components.Html.root.querySelectorAll(NAV_SELECTOR);\n /**\n * Collection of controls HTML elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n\n this._c = Components.Html.root.querySelectorAll(CONTROLS_SELECTOR);\n this.addBindings();\n },\n\n /**\n * Sets active class to current slide.\n *\n * @return {Void}\n */\n setActive: function setActive() {\n for (var i = 0; i < this._n.length; i++) {\n this.addClass(this._n[i].children);\n }\n },\n\n /**\n * Removes active class to current slide.\n *\n * @return {Void}\n */\n removeActive: function removeActive() {\n for (var i = 0; i < this._n.length; i++) {\n this.removeClass(this._n[i].children);\n }\n },\n\n /**\n * Toggles active class on items inside navigation.\n *\n * @param {HTMLElement} controls\n * @return {Void}\n */\n addClass: function addClass(controls) {\n var settings = Glide.settings;\n var item = controls[Glide.index];\n\n if (item) {\n item.classList.add(settings.classes.activeNav);\n siblings(item).forEach(function (sibling) {\n sibling.classList.remove(settings.classes.activeNav);\n });\n }\n },\n\n /**\n * Removes active class from active control.\n *\n * @param {HTMLElement} controls\n * @return {Void}\n */\n removeClass: function removeClass(controls) {\n var item = controls[Glide.index];\n\n if (item) {\n item.classList.remove(Glide.settings.classes.activeNav);\n }\n },\n\n /**\n * Adds handles to the each group of controls.\n *\n * @return {Void}\n */\n addBindings: function addBindings() {\n for (var i = 0; i < this._c.length; i++) {\n this.bind(this._c[i].children);\n }\n },\n\n /**\n * Removes handles from the each group of controls.\n *\n * @return {Void}\n */\n removeBindings: function removeBindings() {\n for (var i = 0; i < this._c.length; i++) {\n this.unbind(this._c[i].children);\n }\n },\n\n /**\n * Binds events to arrows HTML elements.\n *\n * @param {HTMLCollection} elements\n * @return {Void}\n */\n bind: function bind(elements) {\n for (var i = 0; i < elements.length; i++) {\n Binder.on('click', elements[i], this.click);\n Binder.on('touchstart', elements[i], this.click, capture);\n }\n },\n\n /**\n * Unbinds events binded to the arrows HTML elements.\n *\n * @param {HTMLCollection} elements\n * @return {Void}\n */\n unbind: function unbind(elements) {\n for (var i = 0; i < elements.length; i++) {\n Binder.off(['click', 'touchstart'], elements[i]);\n }\n },\n\n /**\n * Handles `click` event on the arrows HTML elements.\n * Moves slider in driection precised in\n * `data-glide-dir` attribute.\n *\n * @param {Object} event\n * @return {Void}\n */\n click: function click(event) {\n event.preventDefault();\n Components.Run.make(Components.Direction.resolve(event.currentTarget.getAttribute('data-glide-dir')));\n }\n };\n glide_modular_esm_define(Controls, 'items', {\n /**\n * Gets collection of the controls HTML elements.\n *\n * @return {HTMLElement[]}\n */\n get: function get() {\n return Controls._c;\n }\n });\n /**\n * Swap active class of current navigation item:\n * - after mounting to set it to initial index\n * - after each move to the new index\n */\n\n Events.on(['mount.after', 'move.after'], function () {\n Controls.setActive();\n });\n /**\n * Remove bindings and HTML Classes:\n * - on destroying, to bring markup to its initial state\n */\n\n Events.on('destroy', function () {\n Controls.removeBindings();\n Controls.removeActive();\n Binder.destroy();\n });\n return Controls;\n}\n\nfunction keyboard(Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Keyboard = {\n /**\n * Binds keyboard events on component mount.\n *\n * @return {Void}\n */\n mount: function mount() {\n if (Glide.settings.keyboard) {\n this.bind();\n }\n },\n\n /**\n * Adds keyboard press events.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('keyup', document, this.press);\n },\n\n /**\n * Removes keyboard press events.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('keyup', document);\n },\n\n /**\n * Handles keyboard's arrows press and moving glide foward and backward.\n *\n * @param {Object} event\n * @return {Void}\n */\n press: function press(event) {\n if (event.keyCode === 39) {\n Components.Run.make(Components.Direction.resolve('>'));\n }\n\n if (event.keyCode === 37) {\n Components.Run.make(Components.Direction.resolve('<'));\n }\n }\n };\n /**\n * Remove bindings from keyboard:\n * - on destroying to remove added events\n * - on updating to remove events before remounting\n */\n\n Events.on(['destroy', 'update'], function () {\n Keyboard.unbind();\n });\n /**\n * Remount component\n * - on updating to reflect potential changes in settings\n */\n\n Events.on('update', function () {\n Keyboard.mount();\n });\n /**\n * Destroy binder:\n * - on destroying to remove listeners\n */\n\n Events.on('destroy', function () {\n Binder.destroy();\n });\n return Keyboard;\n}\n\nfunction autoplay(Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Autoplay = {\n /**\n * Initializes autoplaying and events.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.start();\n\n if (Glide.settings.hoverpause) {\n this.bind();\n }\n },\n\n /**\n * Starts autoplaying in configured interval.\n *\n * @param {Boolean|Number} force Run autoplaying with passed interval regardless of `autoplay` settings\n * @return {Void}\n */\n start: function start() {\n var _this = this;\n\n if (Glide.settings.autoplay) {\n if (isUndefined(this._i)) {\n this._i = setInterval(function () {\n _this.stop();\n\n Components.Run.make('>');\n\n _this.start();\n }, this.time);\n }\n }\n },\n\n /**\n * Stops autorunning of the glide.\n *\n * @return {Void}\n */\n stop: function stop() {\n this._i = clearInterval(this._i);\n },\n\n /**\n * Stops autoplaying while mouse is over glide's area.\n *\n * @return {Void}\n */\n bind: function bind() {\n var _this2 = this;\n\n Binder.on('mouseover', Components.Html.root, function () {\n _this2.stop();\n });\n Binder.on('mouseout', Components.Html.root, function () {\n _this2.start();\n });\n },\n\n /**\n * Unbind mouseover events.\n *\n * @returns {Void}\n */\n unbind: function unbind() {\n Binder.off(['mouseover', 'mouseout'], Components.Html.root);\n }\n };\n glide_modular_esm_define(Autoplay, 'time', {\n /**\n * Gets time period value for the autoplay interval. Prioritizes\n * times in `data-glide-autoplay` attrubutes over options.\n *\n * @return {Number}\n */\n get: function get() {\n var autoplay = Components.Html.slides[Glide.index].getAttribute('data-glide-autoplay');\n\n if (autoplay) {\n return toInt(autoplay);\n }\n\n return toInt(Glide.settings.autoplay);\n }\n });\n /**\n * Stop autoplaying and unbind events:\n * - on destroying, to clear defined interval\n * - on updating via API to reset interval that may changed\n */\n\n Events.on(['destroy', 'update'], function () {\n Autoplay.unbind();\n });\n /**\n * Stop autoplaying:\n * - before each run, to restart autoplaying\n * - on pausing via API\n * - on destroying, to clear defined interval\n * - while starting a swipe\n * - on updating via API to reset interval that may changed\n */\n\n Events.on(['run.before', 'pause', 'destroy', 'swipe.start', 'update'], function () {\n Autoplay.stop();\n });\n /**\n * Start autoplaying:\n * - after each run, to restart autoplaying\n * - on playing via API\n * - while ending a swipe\n */\n\n Events.on(['run.after', 'play', 'swipe.end'], function () {\n Autoplay.start();\n });\n /**\n * Remount autoplaying:\n * - on updating via API to reset interval that may changed\n */\n\n Events.on('update', function () {\n Autoplay.mount();\n });\n /**\n * Destroy a binder:\n * - on destroying glide instance to clearup listeners\n */\n\n Events.on('destroy', function () {\n Binder.destroy();\n });\n return Autoplay;\n}\n/**\n * Sorts keys of breakpoint object so they will be ordered from lower to bigger.\n *\n * @param {Object} points\n * @returns {Object}\n */\n\n\nfunction sortBreakpoints(points) {\n if (isObject(points)) {\n return sortKeys(points);\n } else {\n warn('Breakpoints option must be an object');\n }\n\n return {};\n}\n\nfunction breakpoints(Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n /**\n * Holds reference to settings.\n *\n * @type {Object}\n */\n\n var settings = Glide.settings;\n /**\n * Holds reference to breakpoints object in settings. Sorts breakpoints\n * from smaller to larger. It is required in order to proper\n * matching currently active breakpoint settings.\n *\n * @type {Object}\n */\n\n var points = sortBreakpoints(settings.breakpoints);\n /**\n * Cache initial settings before overwritting.\n *\n * @type {Object}\n */\n\n var defaults = _extends({}, settings);\n\n var Breakpoints = {\n /**\n * Matches settings for currectly matching media breakpoint.\n *\n * @param {Object} points\n * @returns {Object}\n */\n match: function match(points) {\n if (typeof window.matchMedia !== 'undefined') {\n for (var point in points) {\n if (points.hasOwnProperty(point)) {\n if (window.matchMedia('(max-width: ' + point + 'px)').matches) {\n return points[point];\n }\n }\n }\n }\n\n return defaults;\n }\n };\n /**\n * Overwrite instance settings with currently matching breakpoint settings.\n * This happens right after component initialization.\n */\n\n _extends(settings, Breakpoints.match(points));\n /**\n * Update glide with settings of matched brekpoint:\n * - window resize to update slider\n */\n\n\n Binder.on('resize', window, throttle(function () {\n Glide.settings = mergeOptions(settings, Breakpoints.match(points));\n }, Glide.settings.throttle));\n /**\n * Resort and update default settings:\n * - on reinit via API, so breakpoint matching will be performed with options\n */\n\n Events.on('update', function () {\n points = sortBreakpoints(points);\n defaults = _extends({}, settings);\n });\n /**\n * Unbind resize listener:\n * - on destroying, to bring markup to its initial state\n */\n\n Events.on('destroy', function () {\n Binder.off('resize', window);\n });\n return Breakpoints;\n}\n\nvar COMPONENTS = {\n Html: Html,\n Translate: Translate,\n Transition: Transition,\n Direction: Direction,\n Peek: Peek,\n Sizes: Sizes,\n Gaps: Gaps,\n Move: Move,\n Clones: Clones,\n Resize: Resize,\n Build: Build,\n Run: Run\n};\n\nvar Glide$1 = function (_Core) {\n inherits(Glide$$1, _Core);\n\n function Glide$$1() {\n classCallCheck(this, Glide$$1);\n return possibleConstructorReturn(this, (Glide$$1.__proto__ || Object.getPrototypeOf(Glide$$1)).apply(this, arguments));\n }\n\n createClass(Glide$$1, [{\n key: 'mount',\n value: function mount() {\n var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return get(Glide$$1.prototype.__proto__ || Object.getPrototypeOf(Glide$$1.prototype), 'mount', this).call(this, _extends({}, COMPONENTS, extensions));\n }\n }]);\n return Glide$$1;\n}(Glide);\n\n/* harmony default export */ const glide_modular_esm = (Glide$1);\n\n;// CONCATENATED MODULE: ./src/ad/desktop/desktop.js\n/* provided dependency */ var desktop_createVidoElement = __webpack_require__(557)[\"default\"];\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction desktop_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction desktop_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction desktop_createClass(Constructor, protoProps, staticProps) { if (protoProps) desktop_defineProperties(Constructor.prototype, protoProps); if (staticProps) desktop_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n // Carousel\n\nvar CreativeDesktop = /*#__PURE__*/function () {\n function CreativeDesktop(vpaid, adContainer) {\n var _this = this;\n\n desktop_classCallCheck(this, CreativeDesktop);\n\n this.vpaid = vpaid;\n this.slot = vpaid.slot_;\n this.videoSlot = this.vpaid.videoSlot_;\n this.container = adContainer;\n this.params = this.vpaid.parameters_;\n this.img = this.params.imgBaseRoute;\n this.state = {\n carousel: {\n villas: {\n id: 'villas',\n mounted: null,\n currentIndex: 0,\n slides: [{\n src: \"\".concat(this.img, \"/pages/two/slides/s-1-min-new.png\"),\n cta: 'cta-villas'\n }, {\n src: \"\".concat(this.img, \"/pages/two/slides/s-2-min-new.png\"),\n cta: 'cta-villas'\n }, {\n src: \"\".concat(this.img, \"/pages/two/slides/s-3-min-new.png\"),\n cta: 'cta-villas'\n }, {\n src: \"\".concat(this.img, \"/pages/two/slides/s-4-min-new.png\"),\n cta: 'cta-villas'\n }]\n },\n resorts: {\n id: 'resorts',\n mounted: null,\n currentIndex: 0,\n slides: [{\n src: \"\".concat(this.img, \"/pages/three/slides/s-1-min-new.png\"),\n cta: 'cta-resorts-seychelles'\n }, {\n src: \"\".concat(this.img, \"/pages/three/slides/s-2-min-new.png\"),\n cta: 'cta-resorts-cefalu'\n }, {\n src: \"\".concat(this.img, \"/pages/three/slides/s-3-min-new.png\"),\n cta: 'cta-resorts-miches'\n }, {\n src: \"\".concat(this.img, \"/pages/three/slides/s-4-min-new.png\"),\n cta: 'cta-resorts-plantation'\n }]\n },\n luxury: {\n id: 'luxury',\n mounted: null,\n currentIndex: 0,\n slides: [{\n index: 0,\n src: \"\".concat(this.img, \"/pages/four/slides/s-1-min-new.png\"),\n cta: 'cta-luxury-brazil'\n }, {\n index: 1,\n src: \"\".concat(this.img, \"/pages/four/slides/s-2-min-new.png\"),\n cta: 'cta-luxury-morocco'\n }, {\n index: 2,\n src: \"\".concat(this.img, \"/pages/four/slides/s-3-min-new.png\"),\n cta: 'cta-luxury-mexico'\n }, {\n index: 3,\n src: \"\".concat(this.img, \"/pages/four/slides/s-4-min-new.png\"),\n cta: 'cta-luxury-dominican'\n }, {\n index: 4,\n src: \"\".concat(this.img, \"/pages/four/slides/s-5-min-new.png\"),\n cta: 'cta-luxury-canada'\n }]\n },\n masted: {\n id: 'masted',\n mounted: null,\n currentIndex: 0,\n slides: [{\n src: \"\".concat(this.img, \"/pages/five/slides/s-1-min-new.png\"),\n cta: 'cta-home'\n }, {\n src: \"\".concat(this.img, \"/pages/five/slides/s-2-min-new.png\"),\n cta: 'cta-home'\n }]\n }\n }\n }; // Load styles\n\n this.vpaid.iDoc.head.appendChild(createFontFaces(this.params.fonts));\n this.vpaid.iDoc.head.appendChild(desktop_createVidoElement(\"style\", null, desktop/* default.toString */.Z.toString()));\n\n var CTAButton = function CTAButton(linkName) {\n return desktop_createVidoElement(\"button\", {\n type: \"button\",\n \"class\": \"cta-button cta-\".concat(linkName),\n onClick: function onClick(e) {\n return _this.handleCTA(e, linkName);\n }\n }, desktop_createVidoElement(\"div\", {\n \"class\": \"text\"\n }, \"Discover More\"), desktop_createVidoElement(\"div\", {\n \"class\": \"icon-wrapper\"\n }, desktop_createVidoElement(\"img\", {\n src: \"\".concat(_this.img, \"/cta-button-arrow.svg\"),\n alt: \"Arrow\"\n })));\n };\n\n var pageOne = function pageOne() {\n return desktop_createVidoElement(\"div\", {\n \"class\": \"page page-first-page current-page\"\n }, desktop_createVidoElement(\"img\", {\n \"class\": \"page-background\",\n src: \"\".concat(_this.img, \"/pages/home/home-bg-min-small.png\"),\n alt: \"Background\"\n }), desktop_createVidoElement(\"img\", {\n \"class\": \"luxury\",\n src: \"\".concat(_this.img, \"/pages/home/luxury.svg\"),\n alt: \"Luxury\"\n }), CTAButton('cta-home'));\n };\n\n var pageTwo = function pageTwo() {\n return desktop_createVidoElement(\"div\", {\n \"class\": \"page page-second-page\"\n }, desktop_createVidoElement(\"img\", {\n \"class\": \"page-background\",\n src: \"\".concat(_this.img, \"/pages/two/two-bg-min-small.png\"),\n alt: \"Background\"\n }), desktop_createVidoElement(\"img\", {\n \"class\": \"text\",\n src: \"\".concat(_this.img, \"/pages/two/two-text.svg\"),\n alt: \"Text\"\n }), CTAButton('cta-villas'), _this.carousel(_this.state.carousel.villas.id, _this.state.carousel.villas.slides, 'square'));\n };\n\n var pageThree = function pageThree() {\n return desktop_createVidoElement(\"div\", {\n \"class\": \"page page-third-page\"\n }, desktop_createVidoElement(\"img\", {\n \"class\": \"page-background\",\n src: \"\".concat(_this.img, \"/pages/three/three-bg-min-small.png\"),\n alt: \"Background\"\n }), CTAButton('cta-resorts'), _this.carousel(_this.state.carousel.resorts.id, _this.state.carousel.resorts.slides, 'full-width'));\n };\n\n var pageFour = function pageFour() {\n return desktop_createVidoElement(\"div\", {\n \"class\": \"page page-fourth-page\"\n }, desktop_createVidoElement(\"img\", {\n \"class\": \"page-background\",\n src: \"\".concat(_this.img, \"/pages/four/four-bg-min-small.png\"),\n alt: \"Background\"\n }), desktop_createVidoElement(\"img\", {\n \"class\": \"text\",\n src: \"\".concat(_this.img, \"/pages/four/four-text.svg\"),\n alt: \"Text\"\n }), _this.carousel(_this.state.carousel.luxury.id, _this.state.carousel.luxury.slides, 'square'), CTAButton('cta-luxury'));\n };\n\n var pageFive = function pageFive() {\n return desktop_createVidoElement(\"div\", {\n \"class\": \"page page-fifth-page\"\n }, desktop_createVidoElement(\"img\", {\n \"class\": \"page-background\",\n src: \"\".concat(_this.img, \"/pages/five/five-bg-min-small.png\"),\n alt: \"Background\"\n }), desktop_createVidoElement(\"img\", {\n \"class\": \"text\",\n src: \"\".concat(_this.img, \"/pages/five/five-text.svg\"),\n alt: \"Text\"\n }), _this.carousel(_this.state.carousel.masted.id, _this.state.carousel.masted.slides, 'square'), CTAButton('cta-masted'));\n };\n\n var content = function content() {\n return desktop_createVidoElement(\"div\", {\n \"class\": \"interactive-content\"\n }, desktop_createVidoElement(\"header\", null, desktop_createVidoElement(\"img\", {\n \"class\": \"logo\",\n src: \"\".concat(_this.img, \"/header-logo.png\"),\n alt: \"Club Med\"\n }), desktop_createVidoElement(\"div\", {\n \"class\": \"links\"\n }, desktop_createVidoElement(\"div\", {\n \"class\": \"link page-link active link-first-page\",\n onClick: function onClick(e) {\n return _this.handleLinkClick(e, 'first-page');\n }\n }, \"Home\"), desktop_createVidoElement(\"div\", {\n \"class\": \"link page-link link-second-page\",\n onClick: function onClick(e) {\n return _this.handleLinkClick(e, 'second-page');\n }\n }, \"Villas & Chalets\"), desktop_createVidoElement(\"div\", {\n \"class\": \"link page-link link-third-page\",\n onClick: function onClick(e) {\n return _this.handleLinkClick(e, 'third-page');\n }\n }, \"Resorts\"), desktop_createVidoElement(\"div\", {\n \"class\": \"link page-link link-fourth-page\",\n onClick: function onClick(e) {\n return _this.handleLinkClick(e, 'fourth-page');\n }\n }, \"Luxury Spaces\"), desktop_createVidoElement(\"div\", {\n \"class\": \"link page-link link-fifth-page\",\n onClick: function onClick(e) {\n return _this.handleLinkClick(e, 'fifth-page');\n }\n }, \"5-Masted Yacht\"))), desktop_createVidoElement(\"main\", null, pageOne(), pageTwo()));\n };\n\n this.videoSlot.addEventListener('click', function (e) {\n _this.handleCTA(e, 'cta-home');\n }); // this.videoSlot.style.display = 'none'\n\n this.container.appendChild(content());\n this.pixelUrl('cta-home'); // Delay loading\n\n setTimeout(function () {\n var main = _this.container.querySelector('.interactive-content main');\n\n main.appendChild(pageThree());\n main.appendChild(pageFour());\n main.appendChild(pageFive());\n\n _this.container.classList.add('loaded'); // // Loaders\n // const loaders = [...this.container.querySelectorAll('.carousel-loader')]\n // // Carousels\n // const fifthPage = this.container.querySelector('.page-fifth-page')\n // fifthPage.appendChild(this.carousel(this.state.carousel.masted.id, this.state.carousel.masted.slides, 'square'))\n // const fourthPage = this.container.querySelector('.page-fourth-page')\n // fourthPage.appendChild(this.carousel(this.state.carousel.luxury.id, this.state.carousel.luxury.slides, 'square'))\n // const thirdPage = this.container.querySelector('.page-third-page')\n // thirdPage.appendChild(this.carousel(this.state.carousel.resorts.id, this.state.carousel.resorts.slides, 'full-width'))\n\n }, 5000);\n }\n\n desktop_createClass(CreativeDesktop, [{\n key: \"handleCTA\",\n value: function handleCTA(e, linkName) {\n // Call the click ad event on CTA redirection, important!\n this.vpaid.clickAd_(); // Click url\n\n this.clickUrl(linkName); // CTA\n\n var link = this.params.cta[linkName];\n window.open(link, '_blank');\n }\n }, {\n key: \"clickUrl\",\n value: function clickUrl(linkName) {\n var clientClickUrl = this.params['click-url'].client[linkName];\n var vidoomyClickUrl = this.params['click-url'].vidoomy[linkName];\n\n if (clientClickUrl) {\n this.makeRequest(clientClickUrl, linkName, 'click-url');\n }\n\n if (vidoomyClickUrl) {\n this.makeRequest(vidoomyClickUrl, linkName, 'click-url');\n }\n }\n }, {\n key: \"pixelUrl\",\n value: function pixelUrl(linkName) {\n var clientPixelUrl = this.params['pixel-url'].client[linkName];\n var client2PixelUrl = this.params['pixel-url'].client2[linkName];\n var vidoomyPixelUrl = this.params['pixel-url'].vidoomy[linkName];\n\n if (clientPixelUrl) {\n this.makeRequest(clientPixelUrl, linkName, 'pixel-url');\n }\n\n if (client2PixelUrl) {\n this.makeRequest(client2PixelUrl, linkName, 'pixel-url');\n }\n\n if (vidoomyPixelUrl) {\n this.makeRequest(vidoomyPixelUrl, linkName, 'pixel-url');\n }\n }\n }, {\n key: \"makeRequest\",\n value: function makeRequest(url, linkName, type) {\n var options = {\n method: 'GET',\n mode: 'no-cors'\n };\n fetch(url, options).then(function (res) {// console.log(`success: \"${linkName}\", ${type}:`, url)\n })[\"catch\"](function (err) {// console.error(err)\n // console.error(`fail: \"${linkName}\", ${type}:`, url)\n });\n }\n }, {\n key: \"handleLinkClick\",\n value: function handleLinkClick(e, linkName) {\n // Is loaded\n var isLoaded = this.container.classList.contains('loaded'); // console.log('isLoaded: ', isLoaded)\n\n if (!isLoaded && (linkName === 'third-page' || linkName === 'fourth-page' || linkName === 'fifth-page')) return; // Links\n\n var links = _toConsumableArray(this.container.querySelectorAll('.links .link'));\n\n links.forEach(function (l) {\n return l.classList.remove('active');\n });\n var clickedLink = this.container.querySelector(\".link-\".concat(linkName));\n clickedLink.classList.add('active'); // Pages\n\n var pages = _toConsumableArray(this.container.querySelectorAll('main .page'));\n\n var clickedPage = this.container.querySelector(\".page-\".concat(linkName));\n pages.forEach(function (p) {\n return p.classList.remove('current-page');\n });\n\n if (clickedPage) {\n clickedPage.classList.add('current-page');\n }\n\n this.videoSlot.style.transition = 'none';\n\n if (linkName === 'first-page') {\n this.pixelUrl('cta-home');\n this.videoSlot.style.display = 'block';\n this.vpaid.resumeAd();\n } else if (linkName === 'second-page') {\n this.pixelUrl('cta-villas');\n this.videoSlot.style.display = 'none';\n\n if (!this.state.carousel.villas.mounted) {\n this.state.carousel.villas.mounted = this.mountSquareCarousel(this.state.carousel.villas.id, this.state.carousel.villas.slides);\n }\n } else if (linkName === 'third-page') {\n this.pixelUrl('cta-resorts');\n this.videoSlot.style.display = 'none';\n this.vpaid.pauseAd();\n\n if (!this.state.carousel.resorts.mounted) {\n this.state.carousel.resorts.mounted = this.mountFullWidthCarousel(this.state.carousel.resorts.id, this.state.carousel.luxury.slides);\n }\n } else if (linkName === 'fourth-page') {\n this.pixelUrl('cta-luxury');\n this.videoSlot.style.display = 'none';\n this.vpaid.pauseAd();\n\n if (!this.state.carousel.luxury.mounted) {\n this.state.carousel.luxury.mounted = this.mountSquareCarousel(this.state.carousel.luxury.id, this.state.carousel.luxury.slides);\n }\n } else if (linkName === 'fifth-page') {\n this.pixelUrl('cta-masted');\n this.videoSlot.style.display = 'none';\n this.vpaid.pauseAd();\n\n if (!this.state.carousel.masted.mounted) {\n this.state.carousel.masted.mounted = this.mountSquareCarousel(this.state.carousel.masted.id, this.state.carousel.masted.slides);\n }\n }\n }\n }, {\n key: \"mountSquareCarousel\",\n value: function mountSquareCarousel(id, slides) {\n var _this2 = this;\n\n var carouselContainer = this.container.querySelector(\"#carousel-\".concat(id));\n if (!carouselContainer) return;\n var config = {\n type: 'carousel',\n // focusAt: id === 'home' ? 'center' : null,\n // perView: id === 'home' ? 3 : 1,\n // startAt: 1,\n infinite: false,\n animationDuration: 400,\n rewindDuration: 0,\n gap: 0 // peek: {\n // \tbefore: 0,\n // \tafter: 50\n // }\n\n };\n var glide = new glide_modular_esm(carouselContainer, config);\n glide.on('run.after', function (e) {\n var index = Number(glide.index);\n var rightArrow = carouselContainer.querySelector('button.glide__arrow--right');\n var leftArrow = carouselContainer.querySelector('button.glide__arrow--left'); // Hide right arrow\n\n if (index === slides.length - 1) {\n rightArrow.style.display = 'none';\n leftArrow.style.display = 'block';\n } else if (index === 0) {\n leftArrow.style.display = 'none';\n rightArrow.style.display = 'block';\n } else {\n rightArrow.style.display = 'block';\n leftArrow.style.display = 'block';\n } // Current index\n\n\n _this2.state.carousel[id].currentIndex = index; // Pixels\n\n if (id === _this2.state.carousel.luxury.id) {\n var slide = _this2.state.carousel.luxury.slides.find(function (slide) {\n return slide.index === index;\n });\n\n _this2.pixelUrl(slide.cta);\n } // // Active dot\n // this.selectHomeDot(index)\n\n });\n glide.on('mount.after', function (e) {\n // Pixels\n if (id === _this2.state.carousel.luxury.id) {\n var slide = _this2.state.carousel.luxury.slides.find(function (slide) {\n return slide.index === 0;\n });\n\n _this2.pixelUrl(slide.cta);\n }\n });\n glide.mount({\n Controls: controls,\n Breakpoints: breakpoints,\n Swipe: swipe\n });\n return glide;\n }\n }, {\n key: \"mountFullWidthCarousel\",\n value: function mountFullWidthCarousel(id) {\n var carouselContainer = this.container.querySelector(\"#carousel-\".concat(id));\n if (!carouselContainer) return;\n var config = {\n type: 'carousel',\n focusAt: 'center',\n perView: 3,\n // startAt: 1,\n animationDuration: 400,\n rewindDuration: 0,\n gap: 3 // peek: {\n // \tbefore: 0,\n // \tafter: 50\n // }\n\n };\n var glide = new glide_modular_esm(carouselContainer, config);\n glide.mount({\n Controls: controls,\n Breakpoints: breakpoints,\n Swipe: swipe\n });\n return glide;\n }\n }, {\n key: \"carousel\",\n value: function carousel(id, slides, shape) {\n var _this3 = this;\n\n // shape = 'square', 'full-width'\n return desktop_createVidoElement(\"div\", {\n id: \"carousel-\".concat(id),\n \"class\": \"carousel-container \".concat(shape, \"-carousel\")\n }, desktop_createVidoElement(\"div\", {\n \"class\": \"glide__track\",\n \"data-glide-el\": \"track\"\n }, desktop_createVidoElement(\"ul\", {\n \"class\": \"glide__slides\"\n }, slides.map(function (slide) {\n return desktop_createVidoElement(\"li\", {\n \"class\": \"glide__slide\",\n onClick: function onClick(e) {\n return _this3.handleCTA(e, slide.cta);\n }\n }, desktop_createVidoElement(\"img\", {\n src: slide.src,\n alt: \"Slide 1\"\n }));\n }))), desktop_createVidoElement(\"div\", {\n \"class\": \"glide__arrows\",\n \"data-glide-el\": \"controls\"\n }, desktop_createVidoElement(\"button\", {\n type: \"button\",\n \"class\": \"glide__arrow glide__arrow--left\",\n \"data-glide-dir\": \"<\",\n style: \"display: \".concat(shape === 'square' ? 'none' : 'block', \";\")\n }, desktop_createVidoElement(\"img\", {\n src: \"\".concat(this.params.carouselAssets, \"/arrows/left.svg\"),\n alt: \"Left\"\n })), desktop_createVidoElement(\"button\", {\n type: \"button\",\n \"class\": \"glide__arrow glide__arrow--right\",\n \"data-glide-dir\": \">\"\n }, desktop_createVidoElement(\"img\", {\n src: \"\".concat(this.params.carouselAssets, \"/arrows/right.svg\"),\n alt: \"Right\"\n }))));\n } // handleCarouselOffersDotClick(e) {\n // \te.stopPropagation()\n // \te.stopImmediatePropagation()\n // \tconst el = e.target\n // \t// Carousel\n // \tconst index = Number(el.getAttribute('data-index'))\n // \tthis.state.carousel.offers.mounted.go(`=${index}`)\n // \t// Active dot\n // \tthis.selectOffersDot(index)\n // }\n // selectOffersDot(index) {\n // \tconst clickedDot = this.container.querySelector(`#carousel-${this.state.carousel.offers.id} [data-index=\"${index}\"]`)\n // \tconst dots = [...this.container.querySelectorAll('#carousel-offers .dot')]\n // \tdots.forEach((d) => d.classList.remove('active'))\n // \tclickedDot.firstChild.classList.add('active')\n // }\n\n }]);\n\n return CreativeDesktop;\n}();\n\n\n;// CONCATENATED MODULE: ./src/index.js\n\n // Wiper\n// import CreativeDesktop from './ad/wiper/wiper.js'\n\n/* harmony default export */ function src() {\n return new VpaidVideoPlayer(CreativeDesktop);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9zcmMvbGliL2hlbHBlcnMuanM/N2I0OCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9zcmMvdnBhaWQuanM/ODQ3MSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9zcmMvbGliL2dsaWRlL2dsaWRlLm1vZHVsYXIuZXNtLmpzP2MyN2MiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vc3JjL2FkL2Rlc2t0b3AvZGVza3RvcC5qcz8zZTYyIiwid2VicGFjazovL1tuYW1lXS8uL3NyYy9pbmRleC5qcz9iNjM1Il0sIm5hbWVzIjpbImRlZmF1bHRUaW1lVXBkYXRlSGFuZGxlciIsInZwYWlkIiwiaW50Iiwic2V0SW50ZXJ2YWwiLCJhdHRyaWJ1dGVzXyIsInRpbWVyIiwidG90YWxBZER1cmF0aW9uIiwicXVhcnRpbGVFdmVudHNfIiwiZm9yRWFjaCIsImV2ZW50IiwibmV4dFF1YXJ0aWxlSW5kZXhfIiwibGVuZ3RoIiwicGVyY2VudFBsYXllZCIsImN1c3RvbUFkRHVyYXRpb24iLCJ2YWx1ZSIsImV2ZW50TmFtZSIsImNhbGxFdmVudF8iLCJjbGVhckludGVydmFsIiwic3RvcEFkIiwiaGlkZUNvbnRyb2xCdXR0b25zIiwic2xvdCIsImNvbnRhaW5lciIsInBhcmVudEVsZW1lbnQiLCJmaXJzdENoaWxkIiwibmV4dFNpYmxpbmciLCJzdHlsZSIsIm9wYWNpdHkiLCJkaXNwbGF5IiwidmlzaWJpbGl0eSIsInNldFRpbWVvdXQiLCJ0b2dnbGVQbGF5ZXJDb250cm9sQnV0dG9uc1Zpc2liaWxpdHkiLCJpc1Zpc2libGUiLCJhZGp1c3RTY2FsZSIsInNsb3RfIiwicGFyYW1ldGVyc18iLCJpbml0aWFsV2lkdGgiLCJ3aWR0aCIsImluaXRpYWxIZWlnaHQiLCJoZWlnaHQiLCJzbG90UGFyZW50Iiwic2xvdEdyYW5kUGFyZW50Iiwic2V0UHJvcGVydHkiLCJzbG90R3JhbnBhcmVudFN0eWxlcyIsInRvcCIsIndpbmRvdyIsImdldENvbXB1dGVkU3R5bGUiLCJjdXJyZW50V2lkdGgiLCJjbGllbnRXaWR0aCIsInBhcnNlRmxvYXQiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCIsInNjYWxlIiwiYXNwZWN0UmF0aW8iLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ4IiwiY3JlYXRlRm9udEZhY2VzIiwiZm9udHMiLCJmb3JtYXRNYXAiLCJ0dGYiLCJvdGYiLCJ3b2ZmIiwid29mZjIiLCJmb250RmFjZXMiLCJPYmplY3QiLCJrZXlzIiwibWFwIiwiZm9udE5hbWUiLCJleHQiLCJzcGxpdCIsInBvcCIsImZvcm1hdCIsIndlaWdodCIsInRvTG93ZXJDYXNlIiwiZmFtaWx5Iiwiam9pbiIsIlZwYWlkVmlkZW9QbGF5ZXIiLCJjcmVhdGl2ZSIsInZpZGVvU2xvdF8iLCJldmVudHNDYWxsYmFja3NfIiwiY29tcGFuaW9ucyIsImRlc2lyZWRCaXRyYXRlIiwiZHVyYXRpb24iLCJleHBhbmRlZCIsImljb25zIiwibGluZWFyIiwicmVtYWluaW5nVGltZSIsInNraXBwYWJsZVN0YXRlIiwidmlld01vZGUiLCJ2b2x1bWUiLCJpbml0aWFsVW5tdXRlIiwiYWQiLCJ2ZXJzaW9uIiwiY3JlYXRpdmVEYXRhIiwiZW52aXJvbm1lbnRWYXJzIiwiSlNPTiIsInBhcnNlIiwidmlkZW9TbG90IiwibG9nIiwiYWRkRXZlbnRMaXN0ZW5lciIsInNldFJlYWN0aXZlQXR0cmlidXRlcyIsInVwZGF0ZVZpZGVvU2xvdF8iLCJsb2FkZWRNZXRhZGF0YV8iLCJiaW5kIiwidGltZVVwZGF0ZUhhbmRsZXJfIiwib3B0aW9ucyIsImFkQ29udGFpbmVyIiwic2V0QXR0cmlidXRlIiwibXV0ZWQiLCJhdXRvcGxheSIsImxvb3AiLCJvbklmcmFtZUxvYWQiLCJlIiwiZnJhbWUiLCJ0YXJnZXQiLCJjb250ZW50V2luZG93IiwiZG9jdW1lbnQiLCJib2R5Iiwib3ZlcmZsb3ciLCJfZnJhbWUiLCJtYXJnaW4iLCJwYWRkaW5nIiwiaURvYyIsInF1ZXJ5U2VsZWN0b3IiLCJhcHBlbmRDaGlsZCIsImZpcnN0Q2xpY2tVbm11dGUiLCJzZXR1cFVubXV0ZSIsInBvc2l0aW9uIiwibGVmdCIsInRyYW5zaXRpb24iLCJ6SW5kZXgiLCJpc1ZpZGVvU21hbGwiLCJtYWtlU21hbGxWaWRlbyIsIm9udGltZXVwZGF0ZSIsImN1cnJlbnRUaW1lIiwiYm9yZGVyIiwiYXNzaWduIiwic3JjIiwic3JjZG9jIiwib3V0ZXJIVE1MIiwib25sb2FkIiwicHJvY2VzcyIsImxhc3RRdWFydGlsZUV2ZW50IiwiY2FsbGJhY2siLCJ1cGRhdGVWaWRlb1BsYXllclNpemVfIiwicGF1c2UiLCJwbGF5IiwiYUNhbGxiYWNrIiwiYUNvbnRleHQiLCJjYWxsQmFjayIsImV2ZW50c0NhbGxiYWNrcyIsIkFkUmVhZHkiLCJBZExvYWRlZCIsIkFkU3RhcnRlZCIsIkFkVmlkZW9TdGFydCIsIkFkSW1wcmVzc2lvbiIsIkFkQ2xpY2tUaHJ1IiwiQWREdXJhdGlvbkNoYW5nZSIsIkFkRXJyb3IiLCJBZEV4cGFuZGVkQ2hhbmdlIiwic3Vic2NyaWJlIiwiZXZlbnRUeXBlIiwiUHJveHkiLCJzZXQiLCJrZXkiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImRpc3BhdGNoRXZlbnQiLCJnZXQiLCJwcm9wIiwicmVjZWl2ZXIiLCJvYnNlcnZlciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJtdXRhdGlvbnMiLCJtdXRhdGlvblJlY29yZCIsInBhdXNlQWQiLCJyZXN1bWVBZCIsIm9ic2VydmUiLCJhdHRyaWJ1dGVzIiwiYXR0cmlidXRlRmlsdGVyIiwidW5tdXRlVmlkZW8iLCJzZXRBZFZvbHVtZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkZWZhdWx0cyIsInR5cGUiLCJzdGFydEF0IiwicGVyVmlldyIsImZvY3VzQXQiLCJnYXAiLCJob3ZlcnBhdXNlIiwia2V5Ym9hcmQiLCJib3VuZCIsInN3aXBlVGhyZXNob2xkIiwiZHJhZ1RocmVzaG9sZCIsInBlclRvdWNoIiwidG91Y2hSYXRpbyIsInRvdWNoQW5nbGUiLCJhbmltYXRpb25EdXJhdGlvbiIsInJld2luZCIsInJld2luZER1cmF0aW9uIiwiYW5pbWF0aW9uVGltaW5nRnVuYyIsInRocm90dGxlIiwiZGlyZWN0aW9uIiwicGVlayIsImJyZWFrcG9pbnRzIiwiY2xhc3NlcyIsImx0ciIsInJ0bCIsInNsaWRlciIsImNhcm91c2VsIiwic3dpcGVhYmxlIiwiZHJhZ2dpbmciLCJjbG9uZVNsaWRlIiwiYWN0aXZlTmF2IiwiYWN0aXZlU2xpZGUiLCJkaXNhYmxlZEFycm93Iiwid2FybiIsIm1zZyIsImNvbnNvbGUiLCJlcnJvciIsIl90eXBlb2YiLCJTeW1ib2wiLCJpdGVyYXRvciIsIm9iaiIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiY2xhc3NDYWxsQ2hlY2siLCJpbnN0YW5jZSIsIkNvbnN0cnVjdG9yIiwiVHlwZUVycm9yIiwiY3JlYXRlQ2xhc3MiLCJkZWZpbmVQcm9wZXJ0aWVzIiwicHJvcHMiLCJpIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImRlZmluZVByb3BlcnR5IiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiX2V4dGVuZHMiLCJhcmd1bWVudHMiLCJzb3VyY2UiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJvYmplY3QiLCJwcm9wZXJ0eSIsIkZ1bmN0aW9uIiwiZGVzYyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInVuZGVmaW5lZCIsInBhcmVudCIsImdldFByb3RvdHlwZU9mIiwiZ2V0dGVyIiwiaW5oZXJpdHMiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJjcmVhdGUiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsInBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJzZWxmIiwiUmVmZXJlbmNlRXJyb3IiLCJ0b0ludCIsInBhcnNlSW50IiwidG9GbG9hdCIsImlzU3RyaW5nIiwiaXNPYmplY3QiLCJpc051bWJlciIsImlzRnVuY3Rpb24iLCJpc1VuZGVmaW5lZCIsImlzQXJyYXkiLCJBcnJheSIsIm1vdW50IiwiZ2xpZGUiLCJleHRlbnNpb25zIiwiZXZlbnRzIiwiY29tcG9uZW50cyIsIm5hbWUiLCJfbmFtZSIsImRlZmluZSIsImRlZmluaXRpb24iLCJzb3J0S2V5cyIsInNvcnQiLCJyZWR1Y2UiLCJyIiwiayIsIm1lcmdlT3B0aW9ucyIsInNldHRpbmdzIiwiRXZlbnRzQnVzIiwiaG9wIiwib24iLCJoYW5kbGVyIiwiaW5kZXgiLCJwdXNoIiwicmVtb3ZlIiwiZW1pdCIsImNvbnRleHQiLCJpdGVtIiwiR2xpZGUiLCJzZWxlY3RvciIsIl9jIiwiX3QiLCJfZSIsImRpc2FibGVkIiwibW91bnQkJDEiLCJtdXRhdGUiLCJ0cmFuc2Zvcm1lcnMiLCJ1cGRhdGUiLCJnbyIsInBhdHRlcm4iLCJSdW4iLCJtYWtlIiwibW92ZSIsImRpc3RhbmNlIiwiVHJhbnNpdGlvbiIsImRpc2FibGUiLCJNb3ZlIiwiZGVzdHJveSIsImludGVydmFsIiwiZW5hYmxlIiwiaXNUeXBlIiwiZ2V0JCQxIiwiX28iLCJzZXQkJDEiLCJvIiwiX2kiLCJfZCIsInN0YXR1cyIsIkNvbXBvbmVudHMiLCJFdmVudHMiLCJfdGhpcyIsImNhbGN1bGF0ZSIsImFmdGVyIiwiaXNTdGFydCIsImlzRW5kIiwiaXNPZmZzZXQiLCJzdGVwcyIsImNvdW50YWJsZVN0ZXBzIiwiTWF0aCIsIm1pbiIsIl9tIiwic3RlcCIsInN1YnN0ciIsIkh0bWwiLCJzbGlkZXMiLCJub3ciLCJEYXRlIiwiZ2V0VGltZSIsImZ1bmMiLCJ3YWl0IiwidGltZW91dCIsImFyZ3MiLCJyZXN1bHQiLCJwcmV2aW91cyIsImxhdGVyIiwibGVhZGluZyIsImFwcGx5IiwidGhyb3R0bGVkIiwiYXQiLCJyZW1haW5pbmciLCJjbGVhclRpbWVvdXQiLCJ0cmFpbGluZyIsImNhbmNlbCIsIk1BUkdJTl9UWVBFIiwiR2FwcyIsImxlbiIsIkRpcmVjdGlvbiIsIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCIsIlNpemVzIiwid3JhcHBlciIsImNoaWxkcmVuIiwic2libGluZ3MiLCJub2RlIiwicGFyZW50Tm9kZSIsIm4iLCJtYXRjaGVkIiwibm9kZVR5cGUiLCJleGlzdCIsIkhUTUxFbGVtZW50IiwiVFJBQ0tfU0VMRUNUT1IiLCJyb290IiwidHJhY2siLCJzbGljZSIsImZpbHRlciIsInNsaWRlIiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJfciIsInQiLCJQZWVrIiwiX3YiLCJiZWZvcmUiLCJvZmZzZXQiLCJtb3ZlbWVudCIsInNsaWRlV2lkdGgiLCJ0cmFuc2xhdGUiLCJpcyIsInNldHVwU2xpZGVzIiwic2V0dXBXcmFwcGVyIiwiZGltZW50aW9uIiwid3JhcHBlclNpemUiLCJvZmZzZXRXaWR0aCIsImdyb3ciLCJDbG9uZXMiLCJyZWR1Y3RvciIsIkJ1aWxkIiwidHlwZUNsYXNzIiwiYWN0aXZlQ2xhc3MiLCJhZGQiLCJzaWJsaW5nIiwicmVtb3ZlQ2xhc3NlcyIsIml0ZW1zIiwiY29sbGVjdCIsIl9HbGlkZSRzZXR0aW5ncyIsInBlZWtJbmNyZW1lbnRlciIsInBhcnQiLCJzdGFydCIsImVuZCIsIm1heCIsImZsb29yIiwiY2xvbmUiLCJjbG9uZU5vZGUiLCJfY2xvbmUiLCJ1bnNoaWZ0IiwiYXBwZW5kIiwiX0NvbXBvbmVudHMkSHRtbCIsImhhbGYiLCJwcmVwZW5kIiwicmV2ZXJzZSIsIl9pMiIsImluc2VydEJlZm9yZSIsIl9pMyIsInJlbW92ZUNoaWxkIiwiRXZlbnRzQmluZGVyIiwibGlzdGVuZXJzIiwiZWwiLCJjbG9zdXJlIiwiY2FwdHVyZSIsIm9mZiIsIlJlc2l6ZSIsIkJpbmRlciIsInVuYmluZCIsIlZBTElEX0RJUkVDVElPTlMiLCJGTElQRURfTU9WRU1FTlRTIiwicmVzb2x2ZSIsInRva2VuIiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyIsImluZGV4T2YiLCJSdGwiLCJtb2RpZnkiLCJHYXAiLCJHcm93IiwiUGVla2luZyIsIkZvY3VzaW5nIiwibXV0YXRvciIsIlRSQU5TRk9STUVSUyIsImNvbmNhdCIsInRyYW5zZm9ybWVyIiwiVHJhbnNsYXRlIiwidHJhbnNmb3JtIiwiY29tcG9zZSIsInN1cHBvcnRzUGFzc2l2ZSIsIm9wdHMiLCJzdXBwb3J0c1Bhc3NpdmUkMSIsIlNUQVJUX0VWRU5UUyIsIk1PVkVfRVZFTlRTIiwiRU5EX0VWRU5UUyIsIk1PVVNFX0VWRU5UUyIsInN3aXBlIiwic3dpcGVTaW4iLCJzd2lwZVN0YXJ0WCIsInN3aXBlU3RhcnRZIiwicGFzc2l2ZSIsIlN3aXBlIiwiYmluZFN3aXBlU3RhcnQiLCJ0b3VjaGVzIiwicGFnZVgiLCJwYWdlWSIsImJpbmRTd2lwZU1vdmUiLCJiaW5kU3dpcGVFbmQiLCJzdWJFeFN4Iiwic3ViRXlTeSIsInBvd0VYIiwiYWJzIiwicG93RVkiLCJzd2lwZUh5cG90ZW51c2UiLCJzcXJ0Iiwic3dpcGVDYXRoZXR1cyIsImFzaW4iLCJQSSIsInN0b3BQcm9wYWdhdGlvbiIsInRocmVzaG9sZCIsInN3aXBlRGlzdGFuY2UiLCJzd2lwZURlZyIsInJvdW5kIiwidW5iaW5kU3dpcGVNb3ZlIiwidW5iaW5kU3dpcGVFbmQiLCJ1bmJpbmRTd2lwZVN0YXJ0IiwiX3RoaXMyIiwiX3RoaXMzIiwiY2hhbmdlZFRvdWNoZXMiLCJpbWFnZXMiLCJJbWFnZXMiLCJkcmFnc3RhcnQiLCJwcmV2ZW50RGVmYXVsdCIsImFuY2hvcnMiLCJkZXRhY2hlZCIsInByZXZlbnRlZCIsIkFuY2hvcnMiLCJfYSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjbGljayIsImRldGFjaCIsImRyYWdnYWJsZSIsImdldEF0dHJpYnV0ZSIsInJlbW92ZUF0dHJpYnV0ZSIsImF0dGFjaCIsIk5BVl9TRUxFQ1RPUiIsIkNPTlRST0xTX1NFTEVDVE9SIiwiY29udHJvbHMiLCJDb250cm9scyIsIl9uIiwiYWRkQmluZGluZ3MiLCJzZXRBY3RpdmUiLCJyZW1vdmVBY3RpdmUiLCJyZW1vdmVCaW5kaW5ncyIsImVsZW1lbnRzIiwiY3VycmVudFRhcmdldCIsIktleWJvYXJkIiwicHJlc3MiLCJrZXlDb2RlIiwiQXV0b3BsYXkiLCJzdG9wIiwidGltZSIsInNvcnRCcmVha3BvaW50cyIsInBvaW50cyIsIkJyZWFrcG9pbnRzIiwibWF0Y2giLCJtYXRjaE1lZGlhIiwicG9pbnQiLCJtYXRjaGVzIiwiQ09NUE9ORU5UUyIsIkdsaWRlJDEiLCJfQ29yZSIsIkdsaWRlJCQxIiwiQ3JlYXRpdmVEZXNrdG9wIiwicGFyYW1zIiwiaW1nIiwiaW1nQmFzZVJvdXRlIiwic3RhdGUiLCJ2aWxsYXMiLCJpZCIsIm1vdW50ZWQiLCJjdXJyZW50SW5kZXgiLCJjdGEiLCJyZXNvcnRzIiwibHV4dXJ5IiwibWFzdGVkIiwiaGVhZCIsInNjc3MiLCJDVEFCdXR0b24iLCJsaW5rTmFtZSIsImhhbmRsZUNUQSIsInBhZ2VPbmUiLCJwYWdlVHdvIiwicGFnZVRocmVlIiwicGFnZUZvdXIiLCJwYWdlRml2ZSIsImNvbnRlbnQiLCJoYW5kbGVMaW5rQ2xpY2siLCJwaXhlbFVybCIsIm1haW4iLCJjbGlja0FkXyIsImNsaWNrVXJsIiwibGluayIsIm9wZW4iLCJjbGllbnRDbGlja1VybCIsImNsaWVudCIsInZpZG9vbXlDbGlja1VybCIsInZpZG9vbXkiLCJtYWtlUmVxdWVzdCIsImNsaWVudFBpeGVsVXJsIiwiY2xpZW50MlBpeGVsVXJsIiwiY2xpZW50MiIsInZpZG9vbXlQaXhlbFVybCIsInVybCIsIm1ldGhvZCIsIm1vZGUiLCJmZXRjaCIsInRoZW4iLCJyZXMiLCJlcnIiLCJpc0xvYWRlZCIsImxpbmtzIiwibCIsImNsaWNrZWRMaW5rIiwicGFnZXMiLCJjbGlja2VkUGFnZSIsInAiLCJtb3VudFNxdWFyZUNhcm91c2VsIiwibW91bnRGdWxsV2lkdGhDYXJvdXNlbCIsImNhcm91c2VsQ29udGFpbmVyIiwiY29uZmlnIiwiaW5maW5pdGUiLCJOdW1iZXIiLCJyaWdodEFycm93IiwibGVmdEFycm93IiwiZmluZCIsInNoYXBlIiwiY2Fyb3VzZWxBc3NldHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQU8sSUFBTUEsd0JBQXdCLEdBQUcsU0FBM0JBLHdCQUEyQixDQUFDQyxLQUFELEVB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QUE1QztBQUpOLFNBTUM7QUFBSyxXQUFHLFlBQUssS0FBSzlELE1BQUwsQ0FBWStELGNBQWpCLHFCQUFSO0FBQTJELFdBQUcsRUFBQztBQUEvRCxRQU5ELENBREQsRUFxQkM7QUFBUSxZQUFJLEVBQUMsUUFBYjtBQUFzQixpQkFBTSxrQ0FBNUI7QUFBK0QsMEJBQWU7QUFBOUUsU0FDQztBQUFLLFdBQUcsWUFBSyxLQUFLL0QsTUFBTCxDQUFZK0QsY0FBakIsc0JBQVI7QUFBNEQsV0FBRyxFQUFDO0FBQWhFLFFBREQsQ0FyQkQsQ0FYRCxDQUREO0FBdUNBLEssQ0FFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FDdGJEO0NBRUE7QUFDQTs7QUFFQSw2QkFBZSxTQUFTLE1BQUc7QUFDMUIsU0FBTyxJQUFJemhCLGdCQUFKLENBQXFCeWQsZUFBckIsQ0FBUDtBQUNBIiwiZmlsZSI6Ijk2OS5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBkZWZhdWx0VGltZVVwZGF0ZUhhbmRsZXIgPSAodnBhaWQpID0+IHtcblx0Y29uc3QgaW50ID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdGlmICh2cGFpZC5hdHRyaWJ1dGVzXy50aW1lciA8IHZwYWlkLmF0dHJpYnV0ZXNfLnRvdGFsQWREdXJhdGlvbikge1xuXHRcdFx0dnBhaWQuYXR0cmlidXRlc18udGltZXIgKz0gMVxuXHRcdFx0dnBhaWQucXVhcnRpbGVFdmVudHNfLmZvckVhY2goKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmICh2cGFpZC5uZXh0UXVhcnRpbGVJbmRleF8gPj0gdnBhaWQucXVhcnRpbGVFdmVudHNfLmxlbmd0aCkgcmV0dXJuXG5cblx0XHRcdFx0Y29uc3QgcGVyY2VudFBsYXllZCA9ICh2cGFpZC5hdHRyaWJ1dGVzXy50aW1lciAqIDEwMC4wKSAvIHZwYWlkLmF0dHJpYnV0ZXNfLmN1c3RvbUFkRHVyYXRpb25cblxuXHRcdFx0XHRpZiAocGVyY2VudFBsYXllZCA+PSB2cGFpZC5xdWFydGlsZUV2ZW50c19bdnBhaWQubmV4dFF1YXJ0aWxlSW5kZXhfXS52YWx1ZSkge1xuXHRcdFx0XHRcdGNvbnN0IGV2ZW50TmFtZSA9IHZwYWlkLnF1YXJ0aWxlRXZlbnRzX1t2cGFpZC5uZXh0UXVhcnRpbGVJbmRleF9dLmV2ZW50XG5cdFx0XHRcdFx0dnBhaWQuY2FsbEV2ZW50XyhldmVudE5hbWUpXG5cdFx0XHRcdFx0dnBhaWQubmV4dFF1YXJ0aWxlSW5kZXhfICs9IDFcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2xlYXJJbnRlcnZhbChpbnQpXG5cdFx0XHR2cGFpZC5zdG9wQWQoKVxuXHRcdFx0Ly8gVE9ETzogQ2hlY2sgd2l0aCBFcmljIGlmIHdlIG5lZWQgdG8gY2FsbCBBZFZpZGVvQ29tcGxldGUgZXZlbnQsIG9yIHNvbWUgb3RoZXIgZXZlbnRcblx0XHR9XG5cdH0sIDEwMDApXG59XG5cbmV4cG9ydCBjb25zdCBoaWRlQ29udHJvbEJ1dHRvbnMgPSAoc2xvdCkgPT4ge1xuXHRjb25zdCBjb250YWluZXIgPSBzbG90LnBhcmVudEVsZW1lbnRcblx0aWYgKGNvbnRhaW5lciAmJiBjb250YWluZXIuZmlyc3RDaGlsZCAmJiBjb250YWluZXIuZmlyc3RDaGlsZC5uZXh0U2libGluZykge1xuXHRcdGNvbnRhaW5lci5maXJzdENoaWxkLm5leHRTaWJsaW5nLnN0eWxlLm9wYWNpdHkgPSAnMCdcblx0XHRjb250YWluZXIuZmlyc3RDaGlsZC5uZXh0U2libGluZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG5cdFx0Y29udGFpbmVyLmZpcnN0Q2hpbGQubmV4dFNpYmxpbmcuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nXG5cdH0gZWxzZSB7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRoaWRlQ29udHJvbEJ1dHRvbnMoc2xvdClcblx0XHR9LCA1MClcblx0fVxufVxuXG5leHBvcnQgY29uc3QgdG9nZ2xlUGxheWVyQ29udHJvbEJ1dHRvbnNWaXNpYmlsaXR5ID0gKGlzVmlzaWJsZSwgc2xvdCkgPT4ge1xuXHRpZiAoaXNWaXNpYmxlKSB7XG5cdFx0aWYgKHNsb3QubmV4dFNpYmxpbmcgJiYgc2xvdC5uZXh0U2libGluZy5zdHlsZSkge1xuXHRcdFx0c2xvdC5uZXh0U2libGluZy5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnXG5cdFx0XHRzbG90Lm5leHRTaWJsaW5nLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmIChzbG90Lm5leHRTaWJsaW5nICYmIHNsb3QubmV4dFNpYmxpbmcuc3R5bGUpIHtcblx0XHRcdHNsb3QubmV4dFNpYmxpbmcuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nXG5cdFx0XHRzbG90Lm5leHRTaWJsaW5nLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSB2cGFpZFx0XHRcdFx0XHRcdFt2cGFpZCBlbGVtZW50XVxuICovXG5leHBvcnQgY29uc3QgYWRqdXN0U2NhbGUgPSAodnBhaWQpID0+IHtcblx0Y29uc3QgeyBzbG90XywgYXR0cmlidXRlc18sIHBhcmFtZXRlcnNfIH0gPSB2cGFpZFxuXHRjb25zdCB7IHdpZHRoOiBpbml0aWFsV2lkdGgsIGhlaWdodDogaW5pdGlhbEhlaWdodCB9ID0gcGFyYW1ldGVyc19cblx0Y29uc3Qgc2xvdFBhcmVudCA9IHNsb3RfLnBhcmVudEVsZW1lbnRcblx0Y29uc3Qgc2xvdEdyYW5kUGFyZW50ID0gc2xvdF8ucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50XG5cblx0c2xvdFBhcmVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnd2lkdGgnLCBgJHtpbml0aWFsV2lkdGh9cHhgLCAnaW1wb3J0YW50Jylcblx0c2xvdFBhcmVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnaGVpZ2h0JywgYCR7aW5pdGlhbEhlaWdodH1weGAsICdpbXBvcnRhbnQnKVxuXG5cdC8vIEJVRzogQ3JlYXRlcyBhIHByb2JsZW0gd2l0aCB0aGUgc2xpZGVyIG9uIG1vYmlsZSBzY3JlZW5zIChzbGlkZXIgaXMgYmlnZ2VyIHRoYW4gaXQgc2hvdWxkIGJlKVxuXHQvLyBzbG90R3JhbmRQYXJlbnQuc3R5bGUuc2V0UHJvcGVydHkoJ3dpZHRoJywgJzEwMCUnLCAnaW1wb3J0YW50Jyk7XG5cdGlmIChhdHRyaWJ1dGVzXy53aWR0aCA+IDQwMCAmJiBhdHRyaWJ1dGVzXy5oZWlnaHQgPiAyMjUpIHtcblx0XHRzbG90R3JhbmRQYXJlbnQuc3R5bGUuc2V0UHJvcGVydHkoJ3dpZHRoJywgJzEwMCUnLCAnaW1wb3J0YW50Jylcblx0fVxuXG5cdHNsb3RHcmFuZFBhcmVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnbWF4LXdpZHRoJywgYCR7aW5pdGlhbFdpZHRofXB4YCwgJ2ltcG9ydGFudCcpXG5cdHNsb3RHcmFuZFBhcmVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnbWF4LWhlaWdodCcsIGAke2luaXRpYWxIZWlnaHR9cHhgLCAnaW1wb3J0YW50JylcblxuXHRzbG90Xy5zdHlsZS5zZXRQcm9wZXJ0eSgnd2lkdGgnLCBgJHtpbml0aWFsV2lkdGh9cHhgLCAnaW1wb3J0YW50Jylcblx0c2xvdF8uc3R5bGUuc2V0UHJvcGVydHkoJ2hlaWdodCcsIGAke2luaXRpYWxIZWlnaHR9cHhgLCAnaW1wb3J0YW50JylcblxuXHRjb25zdCBzbG90R3JhbnBhcmVudFN0eWxlcyA9IHRvcC53aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzbG90R3JhbmRQYXJlbnQpXG5cdGNvbnN0IGN1cnJlbnRXaWR0aCA9IHNsb3RHcmFuZFBhcmVudC5jbGllbnRXaWR0aCAtIHBhcnNlRmxvYXQoc2xvdEdyYW5wYXJlbnRTdHlsZXMucGFkZGluZ0xlZnQpIC0gcGFyc2VGbG9hdChzbG90R3JhbnBhcmVudFN0eWxlcy5wYWRkaW5nUmlnaHQpXG5cdGxldCBzY2FsZSA9IGN1cnJlbnRXaWR0aCAvIGluaXRpYWxXaWR0aFxuXHRpZiAoc2NhbGUgPiAxKSBzY2FsZSA9IDFcblx0aWYgKGF0dHJpYnV0ZXNfWydzY2FsZSddICE9PSBzY2FsZSkgYXR0cmlidXRlc19bJ3NjYWxlJ10gPSBzY2FsZVxuXG5cdHNsb3RQYXJlbnQuc3R5bGUuc2V0UHJvcGVydHkoJ3RyYW5zZm9ybS1vcmlnaW4nLCAnMHB4IDBweCcsICdpbXBvcnRhbnQnKVxuXHRzbG90UGFyZW50LnN0eWxlLnNldFByb3BlcnR5KCd0cmFuc2Zvcm0nLCBgc2NhbGUoJHtzY2FsZX0pYClcblxuXHQvLyBBZGp1c3QgdGhlIGhlaWdodCBvZiBzbG90R3JhbmRQYXJlbnQgYmVjYXVzZSBpdCBzdGF5cyBmaXhlZFxuXHRjb25zdCBhc3BlY3RSYXRpbyA9IGluaXRpYWxXaWR0aCAvIGluaXRpYWxIZWlnaHRcblx0c2xvdEdyYW5kUGFyZW50LnN0eWxlLnNldFByb3BlcnR5KCdoZWlnaHQnLCBgJHtzbG90R3JhbmRQYXJlbnQuY2xpZW50V2lkdGggLyBhc3BlY3RSYXRpb31weGAsICdpbXBvcnRhbnQnKVxuXG5cdC8vIEFkanVzdCBzbGlkZXIgcmlnaHRcblx0aWYgKHNsb3RHcmFuZFBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS54IDw9IDApIHtcblx0XHRzbG90R3JhbmRQYXJlbnQuc3R5bGUuc2V0UHJvcGVydHkoJ3JpZ2h0JywgJzAnLCAnaW1wb3J0YW50Jylcblx0fVxufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlRm9udEZhY2VzID0gKGZvbnRzKSA9PiB7XG5cdGNvbnN0IGZvcm1hdE1hcCA9IHtcblx0XHR0dGY6ICd0cnVldHlwZScsXG5cdFx0b3RmOiAnb3BlbnR5cGUnLFxuXHRcdHdvZmY6ICd3b2ZmJyxcblx0XHR3b2ZmMjogJ3dvZmYyJ1xuXHR9XG5cblx0Y29uc3QgZm9udEZhY2VzID0gT2JqZWN0LmtleXMoZm9udHMpLm1hcCgoZm9udE5hbWUpID0+IHtcblx0XHRjb25zdCBleHQgPSBmb250c1tmb250TmFtZV0uc3BsaXQoJy4nKS5wb3AoKVxuXHRcdGNvbnN0IGZvcm1hdCA9IGBmb3JtYXQoJyR7Zm9ybWF0TWFwW2V4dF19JylgXG5cdFx0Y29uc3Qgd2VpZ2h0ID0gZm9udE5hbWUuc3BsaXQoJy0nKS5wb3AoKS50b0xvd2VyQ2FzZSgpXG5cdFx0Y29uc3Qgc3R5bGUgPSAoZm9udE5hbWUuc3BsaXQoJy0nKVsyXSB8fCAnbm9ybWFsJykudG9Mb3dlckNhc2UoKVxuXHRcdGNvbnN0IGZhbWlseSA9IGZvbnROYW1lLnNwbGl0KCctJykuam9pbignJylcblx0XHRyZXR1cm4gYFxuXHRcdFx0QGZvbnQtZmFjZSB7XG5cdFx0XHRcdGZvbnQtZmFtaWx5OiAnJHtmYW1pbHl9Jztcblx0XHRcdFx0c3JjOiB1cmwoJyR7Zm9udHNbZm9udE5hbWVdfScpICR7Zm9ybWF0fTtcblx0XHRcdFx0Zm9udC1zdHlsZTogJHtzdHlsZX07XG5cdFx0XHRcdGZvbnQtd2VpZ2h0OiAke3dlaWdodH07XG5cdFx0XHR9XG5cdFx0YFxuXHR9KVxuXG5cdHJldHVybiA8c3R5bGU+e2ZvbnRGYWNlc308L3N0eWxlPlxufVxuIiwiaW1wb3J0IHsgYWRqdXN0U2NhbGUsIGRlZmF1bHRUaW1lVXBkYXRlSGFuZGxlciB9IGZyb20gJ0AvbGliL2hlbHBlcnMnXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWcGFpZFZpZGVvUGxheWVyIHtcblx0LyoqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKi9cblx0Y29uc3RydWN0b3IoY3JlYXRpdmUpIHtcblx0XHQvKipcblx0XHQgKiBUaGUgc2xvdCBpcyB0aGUgZGl2IGVsZW1lbnQgb24gdGhlIG1haW4gcGFnZSB0aGF0IHRoZSBhZCBpcyBzdXBwb3NlZCB0b1xuXHRcdCAqIG9jY3VweS5cblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0dGhpcy5zbG90XyA9IG51bGxcblxuXHRcdC8qKlxuXHRcdCAqIENyZWF0aXZlIHRlbXBsYXRlIChkZXNrdG9wIG9yIG1vYmlsZSlcblx0XHQgKi9cblx0XHR0aGlzLmNyZWF0aXZlID0gY3JlYXRpdmVcblxuXHRcdC8qKlxuXHRcdCAqIFRoZSB2aWRlbyBzbG90IGlzIHRoZSB2aWRlbyBlbGVtZW50IHVzZWQgYnkgdGhlIGFkIHRvIHJlbmRlciB2aWRlbyBjb250ZW50LlxuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHR0aGlzLnZpZGVvU2xvdF8gPSBudWxsXG5cblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3QgY29udGFpbmluZyBhbGwgcmVnaXN0ZXJlZCBldmVudHMuIFRoZXNlIGV2ZW50cyBhcmUgYWxsXG5cdFx0ICogY2FsbGJhY2tzIGZvciB1c2UgYnkgdGhlIFZQQUlEIGFkLlxuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHR0aGlzLmV2ZW50c0NhbGxiYWNrc18gPSB7fVxuXG5cdFx0LyoqXG5cdFx0ICogQSBsaXN0IG9mIGdldGFibGUgYW5kIHNldGFibGUgYXR0cmlidXRlcy5cblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0dGhpcy5hdHRyaWJ1dGVzXyA9IHtcblx0XHRcdGNvbXBhbmlvbnM6ICcnLFxuXHRcdFx0ZGVzaXJlZEJpdHJhdGU6IDI1Nixcblx0XHRcdGR1cmF0aW9uOiAxMCxcblx0XHRcdGV4cGFuZGVkOiBmYWxzZSxcblx0XHRcdHdpZHRoOiAwLFxuXHRcdFx0aGVpZ2h0OiAwLFxuXHRcdFx0aWNvbnM6ICcnLFxuXHRcdFx0bGluZWFyOiB0cnVlLFxuXHRcdFx0cmVtYWluaW5nVGltZTogMTAsXG5cdFx0XHRza2lwcGFibGVTdGF0ZTogZmFsc2UsXG5cdFx0XHR2aWV3TW9kZTogJ25vcm1hbCcsXG5cdFx0XHR2b2x1bWU6IDEuMCxcblx0XHRcdHRpbWVyOiAwLFxuXHRcdFx0Y3VzdG9tQWREdXJhdGlvbjogMTUsXG5cdFx0XHR0b3RhbEFkRHVyYXRpb246IDQ1LFxuXHRcdFx0aW5pdGlhbFVubXV0ZTogZmFsc2UsXG5cdFx0XHRzY2FsZTogMVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEEgc2V0IG9mIGFkIHBsYXliYWNrIGV2ZW50cyB0byBiZSByZXBvcnRlZC5cblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0dGhpcy5xdWFydGlsZUV2ZW50c18gPSBbXG5cdFx0XHR7IGV2ZW50OiAnQWRJbXByZXNzaW9uJywgdmFsdWU6IDAgfSxcblx0XHRcdHsgZXZlbnQ6ICdBZFZpZGVvU3RhcnQnLCB2YWx1ZTogMCB9LFxuXHRcdFx0eyBldmVudDogJ0FkVmlkZW9GaXJzdFF1YXJ0aWxlJywgdmFsdWU6IDI1IH0sXG5cdFx0XHR7IGV2ZW50OiAnQWRWaWRlb01pZHBvaW50JywgdmFsdWU6IDUwIH0sXG5cdFx0XHR7IGV2ZW50OiAnQWRWaWRlb1RoaXJkUXVhcnRpbGUnLCB2YWx1ZTogNzUgfSxcblx0XHRcdHsgZXZlbnQ6ICdBZFZpZGVvQ29tcGxldGUnLCB2YWx1ZTogMTAwIH1cblx0XHRdXG5cblx0XHQvKipcblx0XHQgKiBAdHlwZSB7bnVtYmVyfSBBbiBpbmRleCBpbnRvIHdoYXQgcXVhcnRpbGUgd2FzIGxhc3QgcmVwb3J0ZWQuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHR0aGlzLm5leHRRdWFydGlsZUluZGV4XyA9IDBcblxuXHRcdC8qKlxuXHRcdCAqIFBhcmFtZXRlcnMgcGFzc2VkIGluIGZyb20gdGhlIEFkUGFyYW1ldGVycyBzZWN0aW9uIG9mIHRoZSBWQVNULlxuXHRcdCAqIFVzZWQgZm9yIHZpZGVvIFVSTCBhbmQgTUlNRSB0eXBlLlxuXHRcdCAqXG5cdFx0ICogQHR5cGUgeyFvYmplY3R9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHR0aGlzLnBhcmFtZXRlcnNfID0ge31cblxuXHRcdC8qKlxuXHRcdCAqIFRoZSBhZCBvYmplY3Rcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0dGhpcy5hZCA9IG51bGxcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBzdXBwb3J0ZWQgVlBBSUQgdmVyaW9uLlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdmVyc2lvblxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRoYW5kc2hha2VWZXJzaW9uKHZlcnNpb24pIHtcblx0XHRyZXR1cm4gJzIuMCdcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyBhbGwgYXR0cmlidXRlcyBpbiB0aGUgYWQuIFRoZSBhZCB3aWxsIG5vdCBzdGFydCB1bnRpbCBzdGFydEFkIGlzXFxcblx0ICogY2FsbGVkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggVGhlIGFkIHdpZHRoLlxuXHQgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IFRoZSBhZCBoZWlnaHQuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB2aWV3TW9kZSBUaGUgYWQgdmlldyBtb2RlLlxuXHQgKiBAcGFyYW0ge251bWJlcn0gZGVzaXJlZEJpdHJhdGUgVGhlIGRlc2lyZWQgYml0cmF0ZS5cblx0ICogQHBhcmFtIHtPYmplY3R9IGNyZWF0aXZlRGF0YSBEYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3JlYXRpdmUuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBlbnZpcm9ubWVudFZhcnMgUnVudGltZSB2YXJpYWJsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZVxuXHQgKiAgICAgY3JlYXRpdmUgbGlrZSB0aGUgc2xvdCBhbmQgdmlkZW8gc2xvdC5cblx0ICovXG5cdGluaXRBZCh3aWR0aCwgaGVpZ2h0LCB2aWV3TW9kZSwgZGVzaXJlZEJpdHJhdGUsIGNyZWF0aXZlRGF0YSwgZW52aXJvbm1lbnRWYXJzKSB7XG5cdFx0dGhpcy5hdHRyaWJ1dGVzX1snd2lkdGgnXSA9IHdpZHRoXG5cdFx0dGhpcy5hdHRyaWJ1dGVzX1snaGVpZ2h0J10gPSBoZWlnaHRcblx0XHR0aGlzLmF0dHJpYnV0ZXNfWyd2aWV3TW9kZSddID0gdmlld01vZGVcblx0XHR0aGlzLmF0dHJpYnV0ZXNfWydkZXNpcmVkQml0cmF0ZSddID0gZGVzaXJlZEJpdHJhdGVcblxuXHRcdC8vIHNsb3QgYW5kIHZpZGVvU2xvdCBhcmUgcGFzc2VkIGFzIHBhcnQgb2YgdGhlIGVudmlyb25tZW50VmFyc1xuXHRcdHRoaXMucGFyYW1ldGVyc18gPSBKU09OLnBhcnNlKGNyZWF0aXZlRGF0YVsnQWRQYXJhbWV0ZXJzJ10pXG5cdFx0dGhpcy5zbG90XyA9IGVudmlyb25tZW50VmFycy5zbG90XG5cdFx0dGhpcy52aWRlb1Nsb3RfID0gZW52aXJvbm1lbnRWYXJzLnZpZGVvU2xvdFxuXHRcdHRoaXMubG9nKGBpbml0QWQ6ICR7d2lkdGh9eCR7aGVpZ2h0fSwgdmlld01vZGU6ICR7dmlld01vZGV9LCBkZXNpcmVkQml0cmF0ZTogJHtkZXNpcmVkQml0cmF0ZX1gLCBgY3JlYXRpdmVEYXRhOiAke2NyZWF0aXZlRGF0YVsnQWRQYXJhbWV0ZXJzJ119YClcblx0XHR0b3Aud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IGFkanVzdFNjYWxlKHRoaXMpKVxuXG5cdFx0dGhpcy5zZXRSZWFjdGl2ZUF0dHJpYnV0ZXMoKVxuXHRcdHRoaXMudXBkYXRlVmlkZW9TbG90XygpXG5cdFx0dGhpcy52aWRlb1Nsb3RfLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5sb2FkZWRNZXRhZGF0YV8uYmluZCh0aGlzKSwgZmFsc2UpXG5cdFx0aWYgKHRoaXMucGFyYW1ldGVyc18uZm9ybWF0ID09PSAndmlkZW8nKSB7XG5cdFx0XHR0aGlzLnZpZGVvU2xvdF8uYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMudGltZVVwZGF0ZUhhbmRsZXJfLmJpbmQodGhpcyksIGZhbHNlKVxuXHRcdFx0dGhpcy52aWRlb1Nsb3RfLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgdGhpcy5zdG9wQWQuYmluZCh0aGlzKSwgZmFsc2UpXG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlZmF1bHRUaW1lVXBkYXRlSGFuZGxlcih0aGlzKVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIG9yIHVwZGF0ZXMgdGhlIHZpZGVvIHNsb3QgYW5kIGZpbGxzIGl0IHdpdGggYSBzdXBwb3J0ZWQgdmlkZW8uXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHR1cGRhdGVWaWRlb1Nsb3RfKCkge1xuXHRcdGlmICghdGhpcy5wYXJhbWV0ZXJzXy5vcHRpb25zKSB0aGlzLnBhcmFtZXRlcnNfLm9wdGlvbnMgPSB7fVxuXHRcdGNvbnN0IGFkQ29udGFpbmVyID0gPGRpdiBjbGFzcz1cImNyZWF0aXZlLWNvbnRhaW5lclwiPjwvZGl2PlxuXG5cdFx0aWYgKHRoaXMudmlkZW9TbG90XyA9PSBudWxsKSB7XG5cdFx0XHR0aGlzLnZpZGVvU2xvdF8gPSA8dmlkZW8gY2xhc3M9XCJhZC12aWRlb1wiIHdpZHRoPVwiMTAwJVwiIG11dGVkIHBsYXlzaW5saW5lPjwvdmlkZW8+XG5cdFx0XHR0aGlzLmxvZygnV2FybmluZzogTm8gdmlkZW8gZWxlbWVudCBwYXNzZWQgdG8gYWQsIGNyZWF0aW5nIGVsZW1lbnQuJylcblx0XHR9XG5cblx0XHR0aGlzLnZpZGVvU2xvdF8uc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLnBhcmFtZXRlcnNfWyd2aWRlbyddKVxuXHRcdHRoaXMudmlkZW9TbG90Xy5zZXRBdHRyaWJ1dGUoJ211dGVkJywgJ3RydWUnKVxuXHRcdHRoaXMudmlkZW9TbG90Xy5tdXRlZCA9IHRydWVcblx0XHR0aGlzLnZpZGVvU2xvdF8uc2V0QXR0cmlidXRlKCdwbGF5c2lubGluZScsICd0cnVlJylcblx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzXy5vcHRpb25zLmF1dG9wbGF5KSB0aGlzLnZpZGVvU2xvdF8uc2V0QXR0cmlidXRlKCdhdXRvcGxheScsICd0cnVlJylcblx0XHQvLyBpZiAodGhpcy5wYXJhbWV0ZXJzXy5vcHRpb25zLmZpcnN0Q2xpY2tVbm11dGUpIHRoaXMuc2V0dXBVbm11dGUoYWRDb250YWluZXIpXG5cdFx0aWYgKHRoaXMucGFyYW1ldGVyc18ub3B0aW9ucy5sb29wKSB7XG5cdFx0XHR0aGlzLnZpZGVvU2xvdF8uc2V0QXR0cmlidXRlKCdsb29wJywgJ3RydWUnKVxuXHRcdFx0dGhpcy52aWRlb1Nsb3RfLmxvb3AgPSB0cnVlXG5cdFx0fVxuXG5cdFx0Y29uc3Qgb25JZnJhbWVMb2FkID0gKGUpID0+IHtcblx0XHRcdGNvbnN0IGZyYW1lID0gZS50YXJnZXQuY29udGVudFdpbmRvdy5kb2N1bWVudFxuXHRcdFx0ZnJhbWUuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nXG5cdFx0XHR0aGlzLl9mcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gJzAnXG5cdFx0XHR0aGlzLl9mcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZyA9ICcwJ1xuXG5cdFx0XHR0aGlzLmlEb2MgPSB0aGlzLl9mcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50XG5cdFx0XHRjb25zdCBjb250YWluZXIgPSB0aGlzLmlEb2MucXVlcnlTZWxlY3RvcignLmNyZWF0aXZlLWNvbnRhaW5lcicpXG5cdFx0XHRjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy52aWRlb1Nsb3RfKVxuXG5cdFx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzXy5vcHRpb25zLmZpcnN0Q2xpY2tVbm11dGUpIHRoaXMuc2V0dXBVbm11dGUoYWRDb250YWluZXIsIHRoaXMuaURvYylcblx0XHRcdC8vIGlmICh0aGlzLnBhcmFtZXRlcnNfLm9wdGlvbnMucGF1c2VWaWRlb0lmSGlkZGVuKSB0aGlzLnNldHVwUGF1c2VWaWRlb0lmSGlkZGVuKClcblx0XHRcdHRoaXMudmlkZW9TbG90Xy5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMubG9hZGVkTWV0YWRhdGFfLmJpbmQodGhpcyksIGZhbHNlKVxuXG5cdFx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzXy5mb3JtYXQgPT09ICd2aWRlbycpIHtcblx0XHRcdFx0dGhpcy52aWRlb1Nsb3RfLmFkZEV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLnRpbWVVcGRhdGVIYW5kbGVyXy5iaW5kKHRoaXMpLCBmYWxzZSlcblx0XHRcdFx0dGhpcy52aWRlb1Nsb3RfLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgdGhpcy5zdG9wQWQuYmluZCh0aGlzKSwgZmFsc2UpXG5cblx0XHRcdFx0Ly8gSGFuZGxlIGV2ZW50cyBmb3IgXCJjYXJvdXNlbFwiIGFuZCBcImltYWdlXCIgZm9ybWF0c1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy52aWRlb1Nsb3RfLnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kJywgJ3RyYW5zcGFyZW50JywgJ2ltcG9ydGFudCcpXG5cdFx0XHRcdHRoaXMudmlkZW9TbG90Xy5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSdcblx0XHRcdFx0dGhpcy52aWRlb1Nsb3RfLnN0eWxlLnRvcCA9ICcwJSdcblx0XHRcdFx0dGhpcy52aWRlb1Nsb3RfLnN0eWxlLmxlZnQgPSAnMCUnXG5cdFx0XHRcdHRoaXMudmlkZW9TbG90Xy5zdHlsZS50cmFuc2l0aW9uID0gJ2FsbCAxcydcblx0XHRcdFx0dGhpcy52aWRlb1Nsb3RfLnN0eWxlLndpZHRoID0gJzEwMCUnXG5cdFx0XHRcdHRoaXMudmlkZW9TbG90Xy5zdHlsZS5oZWlnaHQgPSAnMTAwJSdcblx0XHRcdFx0dGhpcy52aWRlb1Nsb3RfLnN0eWxlLnpJbmRleCA9ICc5OTknXG5cdFx0XHR9XG5cblx0XHRcdGxldCBpc1ZpZGVvU21hbGwgPSBmYWxzZVxuXG5cdFx0XHRjb25zdCBtYWtlU21hbGxWaWRlbyA9ICgpID0+IHtcblx0XHRcdFx0dGhpcy52aWRlb1Nsb3RfLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJ1xuXHRcdFx0XHR0aGlzLnZpZGVvU2xvdF8uc3R5bGUudG9wID0gJzkwcHgnXG5cdFx0XHRcdHRoaXMudmlkZW9TbG90Xy5zdHlsZS5sZWZ0ID0gJzI1cHgnXG5cdFx0XHRcdHRoaXMudmlkZW9TbG90Xy5zdHlsZS50cmFuc2l0aW9uID0gJ2FsbCAxcydcblx0XHRcdFx0dGhpcy52aWRlb1Nsb3RfLnN0eWxlLndpZHRoID0gJzM0MHB4J1xuXHRcdFx0XHR0aGlzLnZpZGVvU2xvdF8uc3R5bGUuaGVpZ2h0ID0gJzE5MXB4J1xuXHRcdFx0XHR0aGlzLnZpZGVvU2xvdF8uc3R5bGUuekluZGV4ID0gJzk5OSdcblx0XHRcdH1cblxuXHRcdFx0Ly8gVmlkZW8gdHJhbnNpdGlvblxuXHRcdFx0aWYgKHRoaXMucGFyYW1ldGVyc18ub3B0aW9ucy5tYWtlU21hbGxWaWRlbykge1xuXHRcdFx0XHR0aGlzLnZpZGVvU2xvdF8ub250aW1ldXBkYXRlID0gKGUpID0+IHtcblx0XHRcdFx0XHRpZiAoIWlzVmlkZW9TbWFsbCkge1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMudmlkZW9TbG90Xy5jdXJyZW50VGltZSA+PSAyKSB7XG5cdFx0XHRcdFx0XHRcdGlzVmlkZW9TbWFsbCA9IHRydWVcblx0XHRcdFx0XHRcdFx0bWFrZVNtYWxsVmlkZW8oKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnZpZGVvU2xvdF8uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgKCkgPT4ge1xuXHRcdFx0XHRcdGlmICghaXNWaWRlb1NtYWxsKSB7XG5cdFx0XHRcdFx0XHRtYWtlU21hbGxWaWRlbygpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlzVmlkZW9TbWFsbCA9IHRydWVcblx0XHRcdFx0fSlcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5hZCA9IG5ldyB0aGlzLmNyZWF0aXZlKHRoaXMsIGNvbnRhaW5lcilcblx0XHRcdHRoaXMuY2FsbEV2ZW50XygnQWRMb2FkZWQnKVxuXHRcdH1cblxuXHRcdHRoaXMuX2ZyYW1lID0gPGlmcmFtZT48L2lmcmFtZT5cblx0XHRjb25zdCBzdHlsZSA9IHtcblx0XHRcdHdpZHRoOiAnMTAwJScsXG5cdFx0XHRoZWlnaHQ6ICcxMDAlJyxcblx0XHRcdGJvcmRlcjogMCxcblx0XHRcdHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuXHRcdFx0b3ZlcmZsb3c6ICdoaWRkZW4nLFxuXHRcdFx0bWFyZ2luOiAwLFxuXHRcdFx0cGFkZGluZzogMFxuXHRcdH1cblx0XHRPYmplY3QuYXNzaWduKHRoaXMuX2ZyYW1lLnN0eWxlLCBzdHlsZSlcblx0XHR0aGlzLl9mcmFtZS5zcmMgPSAnYWJvdXQ6c2VsZidcblx0XHR0aGlzLl9mcmFtZS5zcmNkb2MgPSBhZENvbnRhaW5lci5vdXRlckhUTUxcblx0XHR0aGlzLl9mcmFtZS5vbmxvYWQgPSBvbklmcmFtZUxvYWRcblx0XHR0aGlzLnNsb3RfLmFwcGVuZENoaWxkKHRoaXMuX2ZyYW1lKVxuXG5cdFx0Ly8gT25seSBmb3IgZGV2ZWxvcG1lbnRcblx0XHRpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcblx0XHRcdHRoaXMuc3RhcnRBZCgpXG5cdFx0XHR0aGlzLmRldlN1c2NyaWJlKClcblx0XHRcdGFkanVzdFNjYWxlKHRoaXMpXG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxlZCB3aGVuIHRoZSBhZCBpcyBjbGlja2VkLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Y2xpY2tBZF8oKSB7XG5cdFx0dGhpcy5sb2coJ2NsaWNrQWRfJylcblx0XHR0aGlzLmxvZygnQWRDbGlja1RocnUnKVxuXG5cdFx0Ly8gdGhpcy5jYWxsRXZlbnRfKCdBZENsaWNrVGhydScsICcnLCcwJywgdHJ1ZSlcblx0XHRpZiAoJ0FkQ2xpY2tUaHJ1JyBpbiB0aGlzLmV2ZW50c0NhbGxiYWNrc18pIHtcblx0XHRcdHRoaXMuZXZlbnRzQ2FsbGJhY2tzX1snQWRDbGlja1RocnUnXSgnJywgJzAnLCB0cnVlKVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgYnkgdGhlIHZpZGVvIGVsZW1lbnQgd2hlbiB2aWRlbyBtZXRhZGF0YSBpcyBsb2FkZWQuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRsb2FkZWRNZXRhZGF0YV8oKSB7XG5cdFx0Ly8gVGhlIGFkIGR1cmF0aW9uIGlzIG5vdCBrbm93biB1bnRpbCB0aGUgbWVkaWEgbWV0YWRhdGEgaXMgbG9hZGVkLlxuXHRcdC8vIFRoZW4sIHVwZGF0ZSB0aGUgcGxheWVyIHdpdGggdGhlIGR1cmF0aW9uIGNoYW5nZS5cblx0XHR0aGlzLmF0dHJpYnV0ZXNfWydkdXJhdGlvbiddID0gdGhpcy52aWRlb1Nsb3RfLmR1cmF0aW9uXG5cdFx0dGhpcy5jYWxsRXZlbnRfKCdBZER1cmF0aW9uQ2hhbmdlJylcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgYnkgdGhlIHZpZGVvIGVsZW1lbnQgd2hlbiB0aGUgdmlkZW8gcmVhY2hlcyBzcGVjaWZpYyBwb2ludHMgZHVyaW5nXG5cdCAqIHBsYXliYWNrLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0dGltZVVwZGF0ZUhhbmRsZXJfKCkge1xuXHRcdGlmICh0aGlzLm5leHRRdWFydGlsZUluZGV4XyA+PSB0aGlzLnF1YXJ0aWxlRXZlbnRzXy5sZW5ndGgpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRjb25zdCBwZXJjZW50UGxheWVkID0gKHRoaXMudmlkZW9TbG90Xy5jdXJyZW50VGltZSAqIDEwMC4wKSAvIHRoaXMudmlkZW9TbG90Xy5kdXJhdGlvblxuXG5cdFx0aWYgKHBlcmNlbnRQbGF5ZWQgPj0gdGhpcy5xdWFydGlsZUV2ZW50c19bdGhpcy5uZXh0UXVhcnRpbGVJbmRleF9dLnZhbHVlKSB7XG5cdFx0XHR2YXIgbGFzdFF1YXJ0aWxlRXZlbnQgPSB0aGlzLnF1YXJ0aWxlRXZlbnRzX1t0aGlzLm5leHRRdWFydGlsZUluZGV4X10uZXZlbnRcblx0XHRcdGlmICh0aGlzLmV2ZW50c0NhbGxiYWNrc19bbGFzdFF1YXJ0aWxlRXZlbnRdKSB7XG5cdFx0XHRcdHRoaXMuY2FsbEV2ZW50XyhsYXN0UXVhcnRpbGVFdmVudClcblx0XHRcdH1cblx0XHRcdHRoaXMubmV4dFF1YXJ0aWxlSW5kZXhfICs9IDFcblx0XHR9XG5cdFx0aWYgKHRoaXMudmlkZW9TbG90Xy5kdXJhdGlvbiA+IDApIHtcblx0XHRcdHRoaXMuYXR0cmlidXRlc19bJ3JlbWFpbmluZ1RpbWUnXSA9IHRoaXMudmlkZW9TbG90Xy5kdXJhdGlvbiAtIHRoaXMudmlkZW9TbG90Xy5jdXJyZW50VGltZVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIHRoZSBzaXplIG9mIHRoZSB2aWRlbyBwbGF5ZXIuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHR1cGRhdGVWaWRlb1BsYXllclNpemVfKCkge1xuXHRcdHRoaXMudmlkZW9TbG90Xy5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgdGhpcy5hdHRyaWJ1dGVzX1snd2lkdGgnXSlcblx0XHR0aGlzLnZpZGVvU2xvdF8uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCB0aGlzLmF0dHJpYnV0ZXNfWydoZWlnaHQnXSlcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgYnkgdGhlIHdyYXBwZXIgdG8gc3RhcnQgdGhlIGFkLlxuXHQgKi9cblx0c3RhcnRBZCgpIHtcblx0XHR0aGlzLmxvZygnU3RhcnRpbmcgYWQnKVxuXHRcdHRoaXMuY2FsbEV2ZW50XygnQWRTdGFydGVkJylcblx0XHQvLyBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdkZXZlbG9wbWVudCcgJiYgdGhpcy5wYXJhbWV0ZXJzXy5mb3JtYXQgIT09ICd2aWRlbycpIHtcblx0XHQvLyAgIGhpZGVDb250cm9sQnV0dG9ucyh0aGlzLnNsb3RfKTtcblx0XHQvLyB9XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIGJ5IHRoZSB3cmFwcGVyIHRvIHN0b3AgdGhlIGFkLlxuXHQgKi9cblx0c3RvcEFkKCkge1xuXHRcdHRoaXMubG9nKCdTdG9wcGluZyBhZCcpXG5cdFx0Ly8gQ2FsbGluZyBBZFN0b3BwZWQgaW1tZWRpYXRlbHkgdGVybWluYXRlcyB0aGUgYWQuIFNldHRpbmcgYSB0aW1lb3V0IGFsbG93c1xuXHRcdC8vIGV2ZW50cyB0byBnbyB0aHJvdWdoLlxuXHRcdHZhciBjYWxsYmFjayA9IHRoaXMuY2FsbEV2ZW50Xy5iaW5kKHRoaXMpXG5cdFx0c2V0VGltZW91dChjYWxsYmFjaywgNzUsIFsnQWRTdG9wcGVkJ10pXG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIHdoZW4gdGhlIHZpZGVvIHBsYXllciBjaGFuZ2VzIHRoZSB3aWR0aC9oZWlnaHQgb2YgdGhlIGNvbnRhaW5lci5cblx0ICpcblx0ICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIFRoZSBuZXcgd2lkdGguXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgQSBuZXcgaGVpZ2h0LlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdmlld01vZGUgQSBuZXcgdmlldyBtb2RlLlxuXHQgKi9cblx0cmVzaXplQWQod2lkdGgsIGhlaWdodCwgdmlld01vZGUpIHtcblx0XHR0aGlzLmxvZygncmVzaXplQWQgJyArIHdpZHRoICsgJ3gnICsgaGVpZ2h0ICsgJyAnICsgdmlld01vZGUpXG5cdFx0dGhpcy5hdHRyaWJ1dGVzX1snd2lkdGgnXSA9IHdpZHRoXG5cdFx0dGhpcy5hdHRyaWJ1dGVzX1snaGVpZ2h0J10gPSBoZWlnaHRcblx0XHR0aGlzLmF0dHJpYnV0ZXNfWyd2aWV3TW9kZSddID0gdmlld01vZGVcblx0XHR0aGlzLnVwZGF0ZVZpZGVvUGxheWVyU2l6ZV8oKVxuXHRcdHRoaXMuY2FsbEV2ZW50XygnQWRTaXplQ2hhbmdlJylcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdGFkanVzdFNjYWxlKHRoaXMpXG5cdFx0fSwgMTAwKVxuXHR9XG5cblx0LyoqXG5cdCAqIFBhdXNlcyB0aGUgYWQuXG5cdCAqL1xuXHRwYXVzZUFkKCkge1xuXHRcdHRoaXMubG9nKCdwYXVzZUFkJylcblx0XHR0aGlzLnZpZGVvU2xvdF8ucGF1c2UoKVxuXHRcdHRoaXMuY2FsbEV2ZW50XygnQWRQYXVzZWQnKVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlc3VtZXMgdGhlIGFkLlxuXHQgKi9cblx0cmVzdW1lQWQoKSB7XG5cdFx0dGhpcy5sb2coJ3Jlc3VtZUFkJylcblx0XHR0aGlzLnZpZGVvU2xvdF8ucGxheSgpXG5cdFx0dGhpcy5jYWxsRXZlbnRfKCdBZFBsYXlpbmcnKVxuXHR9XG5cblx0LyoqXG5cdCAqIEV4cGFuZHMgdGhlIGFkLlxuXHQgKi9cblx0ZXhwYW5kQWQoKSB7XG5cdFx0dGhpcy5sb2coJ2V4cGFuZEFkJylcblx0XHR0aGlzLmF0dHJpYnV0ZXNfWydleHBhbmRlZCddID0gdHJ1ZVxuXHRcdHRoaXMuY2FsbEV2ZW50XygnQWRFeHBhbmRlZCcpXG5cdH1cblxuXHQvKipcblx0ICogQ29sbGFwc2VzIHRoZSBhZC5cblx0ICovXG5cdGNvbGxhcHNlQWQoKSB7XG5cdFx0dGhpcy5sb2coJ2NvbGxhcHNlQWQnKVxuXHRcdHRoaXMuYXR0cmlidXRlc19bJ2V4cGFuZGVkJ10gPSBmYWxzZVxuXHR9XG5cblx0LyoqXG5cdCAqIFNraXBzIHRoZSBhZC5cblx0ICovXG5cdHNraXBBZCgpIHtcblx0XHR0aGlzLmxvZygnc2tpcEFkJylcblx0XHR2YXIgc2tpcHBhYmxlU3RhdGUgPSB0aGlzLmF0dHJpYnV0ZXNfWydza2lwcGFibGVTdGF0ZSddXG5cdFx0aWYgKHNraXBwYWJsZVN0YXRlKSB7XG5cdFx0XHR0aGlzLmNhbGxFdmVudF8oJ0FkU2tpcHBlZCcpXG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIGZvciBhbiBldmVudC5cblx0ICpcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gYUNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBUaGUgY2FsbGJhY2sgdHlwZS5cblx0ICogQHBhcmFtIHtPYmplY3R9IGFDb250ZXh0IFRoZSBjb250ZXh0IGZvciB0aGUgY2FsbGJhY2suXG5cdCAqL1xuXHRzdWJzY3JpYmUoYUNhbGxiYWNrLCBldmVudE5hbWUsIGFDb250ZXh0KSB7XG5cdFx0dGhpcy5sb2coJ1N1YnNjcmliZSAnICsgZXZlbnROYW1lKVxuXHRcdHZhciBjYWxsQmFjayA9IGFDYWxsYmFjay5iaW5kKGFDb250ZXh0KVxuXHRcdHRoaXMuZXZlbnRzQ2FsbGJhY2tzX1tldmVudE5hbWVdID0gY2FsbEJhY2tcblx0fVxuXG5cdGRldlN1c2NyaWJlKCkge1xuXHRcdGNvbnN0IGV2ZW50c0NhbGxiYWNrcyA9IHtcblx0XHRcdEFkUmVhZHk6ICgpID0+IHt9LFxuXHRcdFx0QWRMb2FkZWQ6ICgpID0+IHt9LFxuXHRcdFx0QWRTdGFydGVkOiAoKSA9PiB7fSxcblx0XHRcdEFkVmlkZW9TdGFydDogKCkgPT4ge30sXG5cdFx0XHRBZEltcHJlc3Npb246ICgpID0+IHt9LFxuXHRcdFx0QWRDbGlja1RocnU6ICgpID0+IHt9LFxuXHRcdFx0QWREdXJhdGlvbkNoYW5nZTogKCkgPT4ge30sXG5cdFx0XHRBZEVycm9yOiAoKSA9PiB7fSxcblx0XHRcdEFkRXhwYW5kZWRDaGFuZ2U6ICgpID0+IHt9LFxuXHRcdFx0QWRJbXByZXNzaW9uOiAoKSA9PiB7fSxcblx0XHRcdEFkTGluZWFyQ2hhbmdlOiAoKSA9PiB7fSxcblx0XHRcdEFkTG9hZGVkOiAoKSA9PiB7fSxcblx0XHRcdEFkUGF1c2VkOiAoKSA9PiB7fSxcblx0XHRcdEFkUGxheWluZzogKCkgPT4ge30sXG5cdFx0XHRBZFJlYWR5OiAoKSA9PiB7fSxcblx0XHRcdEFkUmVtYWluaW5nVGltZUNoYW5nZTogKCkgPT4ge30sXG5cdFx0XHRBZFNpemVDaGFuZ2U6ICgpID0+IHt9LFxuXHRcdFx0QWRTa2lwcGFibGVTdGF0ZUNoYW5nZTogKCkgPT4ge30sXG5cdFx0XHRBZFNraXBwZWQ6ICgpID0+IHt9LFxuXHRcdFx0QWRTdGFydGVkOiAoKSA9PiB7fSxcblx0XHRcdEFkU3RvcHBlZDogKCkgPT4ge30sXG5cdFx0XHRBZFZpZGVvQ29tcGxldGU6ICgpID0+IHt9LFxuXHRcdFx0QWRWaWRlb0ZpcnN0UXVhcnRpbGU6ICgpID0+IHt9LFxuXHRcdFx0QWRWaWRlb01pZHBvaW50OiAoKSA9PiB7fSxcblx0XHRcdEFkVmlkZW9TdGFydDogKCkgPT4ge30sXG5cdFx0XHRBZFZpZGVvVGhpcmRRdWFydGlsZTogKCkgPT4ge30sXG5cdFx0XHRBZFZvbHVtZUNoYW5nZTogKCkgPT4ge31cblx0XHR9XG5cdFx0T2JqZWN0LmtleXMoZXZlbnRzQ2FsbGJhY2tzKS5mb3JFYWNoKChldmVudE5hbWUpID0+IHtcblx0XHRcdHRoaXMuc3Vic2NyaWJlKGV2ZW50c0NhbGxiYWNrc1tldmVudE5hbWVdLCBldmVudE5hbWUsIG51bGwpXG5cdFx0fSlcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgY2FsbGJhY2sgYmFzZWQgb24gdGhlIGV2ZW50TmFtZS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBUaGUgY2FsbGJhY2sgdHlwZS5cblx0ICovXG5cdHVuc3Vic2NyaWJlKGV2ZW50TmFtZSkge1xuXHRcdHRoaXMubG9nKCd1bnN1YnNjcmliZSAnICsgZXZlbnROYW1lKVxuXHRcdHRoaXMuZXZlbnRzQ2FsbGJhY2tzX1tldmVudE5hbWVdID0gbnVsbFxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgd2hldGhlciB0aGUgYWQgaXMgbGluZWFyLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBhZCBpcyBhIGxpbmVhciwgZmFsc2UgZm9yIG5vbiBsaW5lYXIuXG5cdCAqL1xuXHRnZXRBZExpbmVhcigpIHtcblx0XHRyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzX1snbGluZWFyJ11cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFkIHdpZHRoLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBhZCB3aWR0aC5cblx0ICovXG5cdGdldEFkV2lkdGgoKSB7XG5cdFx0cmV0dXJuIHRoaXMuYXR0cmlidXRlc19bJ3dpZHRoJ11cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFkIGhlaWdodC5cblx0ICpcblx0ICogQHJldHVybiB7bnVtYmVyfSBUaGUgYWQgaGVpZ2h0LlxuXHQgKi9cblx0Z2V0QWRIZWlnaHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuYXR0cmlidXRlc19bJ2hlaWdodCddXG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBhZCBpcyBleHBhbmRlZC5cblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGdldEFkRXhwYW5kZWQoKSB7XG5cdFx0dGhpcy5sb2coJ2dldEFkRXhwYW5kZWQnKVxuXHRcdHJldHVybiB0aGlzLmF0dHJpYnV0ZXNfWydleHBhbmRlZCddXG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgc2tpcHBhYmxlIHN0YXRlIG9mIHRoZSBhZC5cblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGdldEFkU2tpcHBhYmxlU3RhdGUoKSB7XG5cdFx0dGhpcy5sb2coJ2dldEFkU2tpcHBhYmxlU3RhdGUnKVxuXHRcdHJldHVybiB0aGlzLmF0dHJpYnV0ZXNfWydza2lwcGFibGVTdGF0ZSddXG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgcmVtYWluaW5nIGFkIHRpbWUsIGluIHNlY29uZHMuXG5cdCAqXG5cdCAqIEByZXR1cm4ge251bWJlcn0gVGhlIHRpbWUgcmVtYWluaW5nIGluIHRoZSBhZC5cblx0ICovXG5cdGdldEFkUmVtYWluaW5nVGltZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzX1sncmVtYWluaW5nVGltZSddXG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZHVyYXRpb24gb2YgdGhlIGFkLCBpbiBzZWNvbmRzLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBkdXJhdGlvbiBvZiB0aGUgYWQuXG5cdCAqL1xuXHRnZXRBZER1cmF0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmF0dHJpYnV0ZXNfWydkdXJhdGlvbiddXG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgYWQgdm9sdW1lLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB2b2x1bWUgb2YgdGhlIGFkLlxuXHQgKi9cblx0Z2V0QWRWb2x1bWUoKSB7XG5cdFx0dGhpcy5sb2coJ2dldEFkVm9sdW1lJylcblx0XHRyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzX1sndm9sdW1lJ11cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBhZCB2b2x1bWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBUaGUgdm9sdW1lIGluIHBlcmNlbnRhZ2UuXG5cdCAqL1xuXHRzZXRBZFZvbHVtZSh2YWx1ZSkge1xuXHRcdHRoaXMuYXR0cmlidXRlc19bJ3ZvbHVtZSddID0gdmFsdWVcblx0XHR0aGlzLnZpZGVvU2xvdF8udm9sdW1lID0gdmFsdWVcblx0XHR0aGlzLmxvZygnc2V0QWRWb2x1bWUgJyArIHZhbHVlKVxuXHRcdHRoaXMuY2FsbEV2ZW50XygnQWRWb2x1bWVDaGFuZ2UnKVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBsaXN0IG9mIGNvbXBhbmlvbiBhZHMgZm9yIHRoZSBhZC5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfSBMaXN0IG9mIGNvbXBhbmlvbnMgaW4gVkFTVCBYTUwuXG5cdCAqL1xuXHRnZXRBZENvbXBhbmlvbnMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuYXR0cmlidXRlc19bJ2NvbXBhbmlvbnMnXVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBsaXN0IG9mIGljb25zLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9IEEgbGlzdCBvZiBpY29ucy5cblx0ICovXG5cdGdldEFkSWNvbnMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuYXR0cmlidXRlc19bJ2ljb25zJ11cblx0fVxuXG5cdC8qKlxuXHQgKiBMb2dzIGV2ZW50cyBhbmQgbWVzc2FnZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG5cdCAqL1xuXHRsb2coKSB7XG5cdFx0aWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSBjb25zb2xlLmxvZyguLi5hcmd1bWVudHMpXG5cdFx0Ly8gY29uc29sZS5sb2coLi4uYXJndW1lbnRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxscyBhbiBldmVudCBpZiB0aGVyZSBpcyBhIGNhbGxiYWNrLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRUeXBlXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRjYWxsRXZlbnRfKGV2ZW50VHlwZSkge1xuXHRcdHRoaXMubG9nKGV2ZW50VHlwZSlcblxuXHRcdGlmIChldmVudFR5cGUgaW4gdGhpcy5ldmVudHNDYWxsYmFja3NfKSB7XG5cdFx0XHR0aGlzLmV2ZW50c0NhbGxiYWNrc19bZXZlbnRUeXBlXSgpXG5cdFx0fVxuXHR9XG5cblx0c2V0UmVhY3RpdmVBdHRyaWJ1dGVzKCkge1xuXHRcdHRoaXMuYXR0cmlidXRlc18gPSBuZXcgUHJveHkodGhpcy5hdHRyaWJ1dGVzXywge1xuXHRcdFx0c2V0OiAodGFyZ2V0LCBrZXksIHZhbHVlKSA9PiB7XG5cdFx0XHRcdHRhcmdldFtrZXldID0gdmFsdWVcblx0XHRcdFx0aWYgKGtleSA9PT0gJ3NjYWxlJykge1xuXHRcdFx0XHRcdGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdzY2FsaW5nJywgeyBkZXRhaWw6IHsgc2NhbGU6IHZhbHVlIH0gfSlcblx0XHRcdFx0XHRjb25zdCBjb250YWluZXIgPSB0aGlzLnNsb3RfLnF1ZXJ5U2VsZWN0b3IoJy5jcmVhdGl2ZS1jb250YWluZXInKVxuXHRcdFx0XHRcdGlmIChjb250YWluZXIpIGNvbnRhaW5lci5kaXNwYXRjaEV2ZW50KGV2ZW50KVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0Z2V0OiAodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGFyZ2V0W3Byb3BdXG5cdFx0XHR9XG5cdFx0fSlcblx0fVxuXG5cdHNldHVwUGF1c2VWaWRlb0lmSGlkZGVuKCkge1xuXHRcdHZhciBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcblx0XHRcdG11dGF0aW9ucy5mb3JFYWNoKChtdXRhdGlvblJlY29yZCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy52aWRlb1Nsb3RfLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykge1xuXHRcdFx0XHRcdHRoaXMucGF1c2VBZCgpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5yZXN1bWVBZCgpXG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0fSlcblxuXHRcdG9ic2VydmVyLm9ic2VydmUodGhpcy52aWRlb1Nsb3RfLCB7IGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWydzdHlsZSddIH0pXG5cdH1cblxuXHRzZXR1cFVubXV0ZShhZENvbnRhaW5lciwgaURvYykge1xuXHRcdGNvbnN0IHVubXV0ZVZpZGVvID0gKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuYXR0cmlidXRlc18uaW5pdGlhbFVubXV0ZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0dGhpcy5zZXRBZFZvbHVtZSgxKVxuXHRcdFx0XHR0aGlzLnZpZGVvU2xvdF8ubXV0ZWQgPSBmYWxzZVxuXHRcdFx0XHR0aGlzLmF0dHJpYnV0ZXNfLmluaXRpYWxVbm11dGUgPSB0cnVlXG5cdFx0XHRcdC8vIFJlbW92ZSBldmVudCBsaXN0ZW5lcnNcblx0XHRcdFx0dGhpcy52aWRlb1Nsb3RfLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdW5tdXRlVmlkZW8pXG5cdFx0XHRcdHRoaXMuc2xvdF8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB1bm11dGVWaWRlbylcblx0XHRcdFx0YWRDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB1bm11dGVWaWRlbylcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy52aWRlb1Nsb3RfLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdW5tdXRlVmlkZW8pXG5cdFx0dGhpcy5zbG90Xy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHVubXV0ZVZpZGVvKVxuXHRcdGFkQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdW5tdXRlVmlkZW8pXG5cdFx0aURvYy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHVubXV0ZVZpZGVvKVxuXHR9XG59XG4iLCIvKiFcbiAqIEdsaWRlLmpzIHYzLjQuMVxuICogKGMpIDIwMTMtMjAxOSBKxJlkcnplaiBDaGHFgnViZWsgPGplZHJ6ZWouY2hhbHViZWtAZ21haWwuY29tPiAoaHR0cDovL2plZHJ6ZWpjaGFsdWJlay5jb20vKVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIG1vdmVtZW50LlxuICAgKlxuICAgKiBBdmFpbGFibGUgdHlwZXM6XG4gICAqIGBzbGlkZXJgIC0gUmV3aW5kcyBzbGlkZXIgdG8gdGhlIHN0YXJ0L2VuZCB3aGVuIGl0IHJlYWNoZXMgdGhlIGZpcnN0IG9yIGxhc3Qgc2xpZGUuXG4gICAqIGBjYXJvdXNlbGAgLSBDaGFuZ2VzIHNsaWRlcyB3aXRob3V0IHN0YXJ0aW5nIG92ZXIgd2hlbiBpdCByZWFjaGVzIHRoZSBmaXJzdCBvciBsYXN0IHNsaWRlLlxuICAgKlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKi9cbiAgdHlwZTogJ3NsaWRlcicsXG5cbiAgLyoqXG4gICAqIFN0YXJ0IGF0IHNwZWNpZmljIHNsaWRlIG51bWJlciBkZWZpbmVkIHdpdGggemVyby1iYXNlZCBpbmRleC5cbiAgICpcbiAgICogQHR5cGUge051bWJlcn1cbiAgICovXG4gIHN0YXJ0QXQ6IDAsXG5cbiAgLyoqXG4gICAqIEEgbnVtYmVyIG9mIHNsaWRlcyB2aXNpYmxlIG9uIHRoZSBzaW5nbGUgdmlld3BvcnQuXG4gICAqXG4gICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAqL1xuICBwZXJWaWV3OiAxLFxuXG4gIC8qKlxuICAgKiBGb2N1cyBjdXJyZW50bHkgYWN0aXZlIHNsaWRlIGF0IGEgc3BlY2lmaWVkIHBvc2l0aW9uIGluIHRoZSB0cmFjay5cbiAgICpcbiAgICogQXZhaWxhYmxlIGlucHV0czpcbiAgICogYGNlbnRlcmAgLSBDdXJyZW50IHNsaWRlIHdpbGwgYmUgYWx3YXlzIGZvY3VzZWQgYXQgdGhlIGNlbnRlciBvZiBhIHRyYWNrLlxuICAgKiBgMCwxLDIsMy4uLmAgLSBDdXJyZW50IHNsaWRlIHdpbGwgYmUgZm9jdXNlZCBvbiB0aGUgc3BlY2lmaWVkIHplcm8tYmFzZWQgaW5kZXguXG4gICAqXG4gICAqIEB0eXBlIHtTdHJpbmd8TnVtYmVyfVxuICAgKi9cbiAgZm9jdXNBdDogMCxcblxuICAvKipcbiAgICogQSBzaXplIG9mIHRoZSBnYXAgYWRkZWQgYmV0d2VlbiBzbGlkZXMuXG4gICAqXG4gICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAqL1xuICBnYXA6IDEwLFxuXG4gIC8qKlxuICAgKiBDaGFuZ2Ugc2xpZGVzIGFmdGVyIGEgc3BlY2lmaWVkIGludGVydmFsLiBVc2UgYGZhbHNlYCBmb3IgdHVybmluZyBvZmYgYXV0b3BsYXkuXG4gICAqXG4gICAqIEB0eXBlIHtOdW1iZXJ8Qm9vbGVhbn1cbiAgICovXG4gIGF1dG9wbGF5OiBmYWxzZSxcblxuICAvKipcbiAgICogU3RvcCBhdXRvcGxheSBvbiBtb3VzZW92ZXIgZXZlbnQuXG4gICAqXG4gICAqIEB0eXBlIHtCb29sZWFufVxuICAgKi9cbiAgaG92ZXJwYXVzZTogdHJ1ZSxcblxuICAvKipcbiAgICogQWxsb3cgZm9yIGNoYW5naW5nIHNsaWRlcyB3aXRoIGxlZnQgYW5kIHJpZ2h0IGtleWJvYXJkIGFycm93cy5cbiAgICpcbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqL1xuICBrZXlib2FyZDogdHJ1ZSxcblxuICAvKipcbiAgICogU3RvcCBydW5uaW5nIGBwZXJWaWV3YCBudW1iZXIgb2Ygc2xpZGVzIGZyb20gdGhlIGVuZC4gVXNlIHRoaXNcbiAgICogb3B0aW9uIGlmIHlvdSBkb24ndCB3YW50IHRvIGhhdmUgYW4gZW1wdHkgc3BhY2UgYWZ0ZXJcbiAgICogYSBzbGlkZXIuIFdvcmtzIG9ubHkgd2l0aCBgc2xpZGVyYCB0eXBlIGFuZCBhXG4gICAqIG5vbi1jZW50ZXJlZCBgZm9jdXNBdGAgc2V0dGluZy5cbiAgICpcbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqL1xuICBib3VuZDogZmFsc2UsXG5cbiAgLyoqXG4gICAqIE1pbmltYWwgc3dpcGUgZGlzdGFuY2UgbmVlZGVkIHRvIGNoYW5nZSB0aGUgc2xpZGUuIFVzZSBgZmFsc2VgIGZvciB0dXJuaW5nIG9mZiBhIHN3aXBpbmcuXG4gICAqXG4gICAqIEB0eXBlIHtOdW1iZXJ8Qm9vbGVhbn1cbiAgICovXG4gIHN3aXBlVGhyZXNob2xkOiA4MCxcblxuICAvKipcbiAgICogTWluaW1hbCBtb3VzZSBkcmFnIGRpc3RhbmNlIG5lZWRlZCB0byBjaGFuZ2UgdGhlIHNsaWRlLiBVc2UgYGZhbHNlYCBmb3IgdHVybmluZyBvZmYgYSBkcmFnZ2luZy5cbiAgICpcbiAgICogQHR5cGUge051bWJlcnxCb29sZWFufVxuICAgKi9cbiAgZHJhZ1RocmVzaG9sZDogMTIwLFxuXG4gIC8qKlxuICAgKiBBIG1heGltdW0gbnVtYmVyIG9mIHNsaWRlcyB0byB3aGljaCBtb3ZlbWVudCB3aWxsIGJlIG1hZGUgb24gc3dpcGluZyBvciBkcmFnZ2luZy4gVXNlIGBmYWxzZWAgZm9yIHVubGltaXRlZC5cbiAgICpcbiAgICogQHR5cGUge051bWJlcnxCb29sZWFufVxuICAgKi9cbiAgcGVyVG91Y2g6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBNb3ZpbmcgZGlzdGFuY2UgcmF0aW8gb2YgdGhlIHNsaWRlcyBvbiBhIHN3aXBpbmcgYW5kIGRyYWdnaW5nLlxuICAgKlxuICAgKiBAdHlwZSB7TnVtYmVyfVxuICAgKi9cbiAgdG91Y2hSYXRpbzogMC41LFxuXG4gIC8qKlxuICAgKiBBbmdsZSByZXF1aXJlZCB0byBhY3RpdmF0ZSBzbGlkZXMgbW92aW5nIG9uIHN3aXBpbmcgb3IgZHJhZ2dpbmcuXG4gICAqXG4gICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAqL1xuICB0b3VjaEFuZ2xlOiA0NSxcblxuICAvKipcbiAgICogRHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBpbiBtaWxsaXNlY29uZHMuXG4gICAqXG4gICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAqL1xuICBhbmltYXRpb25EdXJhdGlvbjogNDAwLFxuXG4gIC8qKlxuICAgKiBBbGxvd3MgbG9vcGluZyB0aGUgYHNsaWRlcmAgdHlwZS4gU2xpZGVyIHdpbGwgcmV3aW5kIHRvIHRoZSBmaXJzdC9sYXN0IHNsaWRlIHdoZW4gaXQncyBhdCB0aGUgc3RhcnQvZW5kLlxuICAgKlxuICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICovXG4gIHJld2luZDogdHJ1ZSxcblxuICAvKipcbiAgICogRHVyYXRpb24gb2YgdGhlIHJld2luZGluZyBhbmltYXRpb24gb2YgdGhlIGBzbGlkZXJgIHR5cGUgaW4gbWlsbGlzZWNvbmRzLlxuICAgKlxuICAgKiBAdHlwZSB7TnVtYmVyfVxuICAgKi9cbiAgcmV3aW5kRHVyYXRpb246IDgwMCxcblxuICAvKipcbiAgICogRWFzaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKi9cbiAgYW5pbWF0aW9uVGltaW5nRnVuYzogJ2N1YmljLWJlemllciguMTY1LCAuODQwLCAuNDQwLCAxKScsXG5cbiAgLyoqXG4gICAqIFRocm90dGxlIGNvc3RseSBldmVudHMgYXQgbW9zdCBvbmNlIHBlciBldmVyeSB3YWl0IG1pbGxpc2Vjb25kcy5cbiAgICpcbiAgICogQHR5cGUge051bWJlcn1cbiAgICovXG4gIHRocm90dGxlOiAxMCxcblxuICAvKipcbiAgICogTW92aW5nIGRpcmVjdGlvbiBtb2RlLlxuICAgKlxuICAgKiBBdmFpbGFibGUgaW5wdXRzOlxuICAgKiAtICdsdHInIC0gbGVmdCB0byByaWdodCBtb3ZlbWVudCxcbiAgICogLSAncnRsJyAtIHJpZ2h0IHRvIGxlZnQgbW92ZW1lbnQuXG4gICAqXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqL1xuICBkaXJlY3Rpb246ICdsdHInLFxuXG4gIC8qKlxuICAgKiBUaGUgZGlzdGFuY2UgdmFsdWUgb2YgdGhlIG5leHQgYW5kIHByZXZpb3VzIHZpZXdwb3J0cyB3aGljaFxuICAgKiBoYXZlIHRvIHBlZWsgaW4gdGhlIGN1cnJlbnQgdmlldy4gQWNjZXB0cyBudW1iZXIgYW5kXG4gICAqIHBpeGVscyBhcyBhIHN0cmluZy4gTGVmdCBhbmQgcmlnaHQgcGVla2luZyBjYW4gYmVcbiAgICogc2V0IHVwIHNlcGFyYXRlbHkgd2l0aCBhIGRpcmVjdGlvbnMgb2JqZWN0LlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICogYDEwMGAgLSBQZWVrIDEwMHB4IG9uIHRoZSBib3RoIHNpZGVzLlxuICAgKiB7IGJlZm9yZTogMTAwLCBhZnRlcjogNTAgfWAgLSBQZWVrIDEwMHB4IG9uIHRoZSBsZWZ0IHNpZGUgYW5kIDUwcHggb24gdGhlIHJpZ2h0IHNpZGUuXG4gICAqXG4gICAqIEB0eXBlIHtOdW1iZXJ8U3RyaW5nfE9iamVjdH1cbiAgICovXG4gIHBlZWs6IDAsXG5cbiAgLyoqXG4gICAqIENvbGxlY3Rpb24gb2Ygb3B0aW9ucyBhcHBsaWVkIGF0IHNwZWNpZmllZCBtZWRpYSBicmVha3BvaW50cy5cbiAgICogRm9yIGV4YW1wbGU6IGRpc3BsYXkgdHdvIHNsaWRlcyBwZXIgdmlldyB1bmRlciA4MDBweC5cbiAgICogYHtcbiAgICogICAnODAwcHgnOiB7XG4gICAqICAgICBwZXJWaWV3OiAyXG4gICAqICAgfVxuICAgKiB9YFxuICAgKi9cbiAgYnJlYWtwb2ludHM6IHt9LFxuXG4gIC8qKlxuICAgKiBDb2xsZWN0aW9uIG9mIGludGVybmFsbHkgdXNlZCBIVE1MIGNsYXNzZXMuXG4gICAqXG4gICAqIEB0b2RvIFJlZmFjdG9yIGBzbGlkZXJgIGFuZCBgY2Fyb3VzZWxgIHByb3BlcnRpZXMgdG8gc2luZ2xlIGB0eXBlOiB7IHNsaWRlcjogJycsIGNhcm91c2VsOiAnJyB9YCBvYmplY3RcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIGNsYXNzZXM6IHtcbiAgICBkaXJlY3Rpb246IHtcbiAgICAgIGx0cjogJ2dsaWRlLS1sdHInLFxuICAgICAgcnRsOiAnZ2xpZGUtLXJ0bCdcbiAgICB9LFxuICAgIHNsaWRlcjogJ2dsaWRlLS1zbGlkZXInLFxuICAgIGNhcm91c2VsOiAnZ2xpZGUtLWNhcm91c2VsJyxcbiAgICBzd2lwZWFibGU6ICdnbGlkZS0tc3dpcGVhYmxlJyxcbiAgICBkcmFnZ2luZzogJ2dsaWRlLS1kcmFnZ2luZycsXG4gICAgY2xvbmVTbGlkZTogJ2dsaWRlX19zbGlkZS0tY2xvbmUnLFxuICAgIGFjdGl2ZU5hdjogJ2dsaWRlX19idWxsZXQtLWFjdGl2ZScsXG4gICAgYWN0aXZlU2xpZGU6ICdnbGlkZV9fc2xpZGUtLWFjdGl2ZScsXG4gICAgZGlzYWJsZWRBcnJvdzogJ2dsaWRlX19hcnJvdy0tZGlzYWJsZWQnXG4gIH1cbn07XG5cbi8qKlxuICogT3V0cHV0cyB3YXJuaW5nIG1lc3NhZ2UgdG8gdGhlIGJvd3NlciBjb25zb2xlLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gbXNnXG4gKiBAcmV0dXJuIHtWb2lkfVxuICovXG5mdW5jdGlvbiB3YXJuKG1zZykge1xuICBjb25zb2xlLmVycm9yKFwiW0dsaWRlIHdhcm5dOiBcIiArIG1zZyk7XG59XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqO1xufSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuXG52YXIgY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufTtcblxudmFyIGNyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9O1xufSgpO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufTtcblxudmFyIGdldCA9IGZ1bmN0aW9uIGdldChvYmplY3QsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTtcblxuICBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpO1xuXG4gICAgaWYgKHBhcmVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7XG4gICAgfVxuICB9IGVsc2UgaWYgKFwidmFsdWVcIiBpbiBkZXNjKSB7XG4gICAgcmV0dXJuIGRlc2MudmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGdldHRlciA9IGRlc2MuZ2V0O1xuXG4gICAgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7XG4gIH1cbn07XG5cbnZhciBpbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn07XG5cbnZhciBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuID0gZnVuY3Rpb24gKHNlbGYsIGNhbGwpIHtcbiAgaWYgKCFzZWxmKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHZhbHVlIGVudGVyZWQgYXMgbnVtYmVyXG4gKiBvciBzdHJpbmcgdG8gaW50ZWdlciB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtOdW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIHRvSW50KHZhbHVlKSB7XG4gIHJldHVybiBwYXJzZUludCh2YWx1ZSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgdmFsdWUgZW50ZXJlZCBhcyBudW1iZXJcbiAqIG9yIHN0cmluZyB0byBmbGF0IHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge051bWJlcn1cbiAqL1xuZnVuY3Rpb24gdG9GbG9hdCh2YWx1ZSkge1xuICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG59XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gIHsqfSAgIHZhbHVlXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbn1cblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YodmFsdWUpO1xuXG4gIHJldHVybiB0eXBlID09PSAnZnVuY3Rpb24nIHx8IHR5cGUgPT09ICdvYmplY3QnICYmICEhdmFsdWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbWl4ZWQtb3BlcmF0b3JzXG59XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhIG51bWJlci5cbiAqXG4gKiBAcGFyYW0gIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG59XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAgeyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyB1bmRlZmluZWQuXG4gKlxuICogQHBhcmFtICB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnO1xufVxuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgYW4gYXJyYXkuXG4gKlxuICogQHBhcmFtICB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLmNvbnN0cnVjdG9yID09PSBBcnJheTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuZCBpbml0aWFsaXplcyBzcGVjaWZpZWQgY29sbGVjdGlvbiBvZiBleHRlbnNpb25zLlxuICogRWFjaCBleHRlbnNpb24gcmVjZWl2ZXMgYWNjZXNzIHRvIGluc3RhbmNlIG9mIGdsaWRlIGFuZCByZXN0IG9mIGNvbXBvbmVudHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGdsaWRlXG4gKiBAcGFyYW0ge09iamVjdH0gZXh0ZW5zaW9uc1xuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIG1vdW50KGdsaWRlLCBleHRlbnNpb25zLCBldmVudHMpIHtcbiAgdmFyIGNvbXBvbmVudHMgPSB7fTtcblxuICBmb3IgKHZhciBuYW1lIGluIGV4dGVuc2lvbnMpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihleHRlbnNpb25zW25hbWVdKSkge1xuICAgICAgY29tcG9uZW50c1tuYW1lXSA9IGV4dGVuc2lvbnNbbmFtZV0oZ2xpZGUsIGNvbXBvbmVudHMsIGV2ZW50cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdhcm4oJ0V4dGVuc2lvbiBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBfbmFtZSBpbiBjb21wb25lbnRzKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oY29tcG9uZW50c1tfbmFtZV0ubW91bnQpKSB7XG4gICAgICBjb21wb25lbnRzW19uYW1lXS5tb3VudCgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnRzO1xufVxuXG4vKipcbiAqIERlZmluZXMgZ2V0dGVyIGFuZCBzZXR0ZXIgcHJvcGVydHkgb24gdGhlIHNwZWNpZmllZCBvYmplY3QuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBvYmogICAgICAgICBPYmplY3Qgd2hlcmUgcHJvcGVydHkgaGFzIHRvIGJlIGRlZmluZWQuXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHByb3AgICAgICAgIE5hbWUgb2YgdGhlIGRlZmluZWQgcHJvcGVydHkuXG4gKiBAcGFyYW0gIHtPYmplY3R9IGRlZmluaXRpb24gIEdldCBhbmQgc2V0IGRlZmluaXRpb25zIGZvciB0aGUgcHJvcGVydHkuXG4gKiBAcmV0dXJuIHtWb2lkfVxuICovXG5mdW5jdGlvbiBkZWZpbmUob2JqLCBwcm9wLCBkZWZpbml0aW9uKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIGRlZmluaXRpb24pO1xufVxuXG4vKipcbiAqIFNvcnRzIGFwaGFiZXRpY2FsbHkgb2JqZWN0IGtleXMuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gc29ydEtleXMob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLnNvcnQoKS5yZWR1Y2UoZnVuY3Rpb24gKHIsIGspIHtcbiAgICByW2tdID0gb2JqW2tdO1xuXG4gICAgcmV0dXJuIHJba10sIHI7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBNZXJnZXMgcGFzc2VkIHNldHRpbmdzIG9iamVjdCB3aXRoIGRlZmF1bHQgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IGRlZmF1bHRzXG4gKiBAcGFyYW0gIHtPYmplY3R9IHNldHRpbmdzXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhkZWZhdWx0cywgc2V0dGluZ3MpIHtcbiAgdmFyIG9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgZGVmYXVsdHMsIHNldHRpbmdzKTtcblxuICAvLyBgT2JqZWN0LmFzc2lnbmAgZG8gbm90IGRlZXBseSBtZXJnZSBvYmplY3RzLCBzbyB3ZVxuICAvLyBoYXZlIHRvIGRvIGl0IG1hbnVhbGx5IGZvciBldmVyeSBuZXN0ZWQgb2JqZWN0XG4gIC8vIGluIG9wdGlvbnMuIEFsdGhvdWdoIGl0IGRvZXMgbm90IGxvb2sgc21hcnQsXG4gIC8vIGl0J3Mgc21hbGxlciBhbmQgZmFzdGVyIHRoYW4gc29tZSBmYW5jeVxuICAvLyBtZXJnaW5nIGRlZXAtbWVyZ2UgYWxnb3JpdGhtIHNjcmlwdC5cbiAgaWYgKHNldHRpbmdzLmhhc093blByb3BlcnR5KCdjbGFzc2VzJykpIHtcbiAgICBvcHRpb25zLmNsYXNzZXMgPSBfZXh0ZW5kcyh7fSwgZGVmYXVsdHMuY2xhc3Nlcywgc2V0dGluZ3MuY2xhc3Nlcyk7XG5cbiAgICBpZiAoc2V0dGluZ3MuY2xhc3Nlcy5oYXNPd25Qcm9wZXJ0eSgnZGlyZWN0aW9uJykpIHtcbiAgICAgIG9wdGlvbnMuY2xhc3Nlcy5kaXJlY3Rpb24gPSBfZXh0ZW5kcyh7fSwgZGVmYXVsdHMuY2xhc3Nlcy5kaXJlY3Rpb24sIHNldHRpbmdzLmNsYXNzZXMuZGlyZWN0aW9uKTtcbiAgICB9XG4gIH1cblxuICBpZiAoc2V0dGluZ3MuaGFzT3duUHJvcGVydHkoJ2JyZWFrcG9pbnRzJykpIHtcbiAgICBvcHRpb25zLmJyZWFrcG9pbnRzID0gX2V4dGVuZHMoe30sIGRlZmF1bHRzLmJyZWFrcG9pbnRzLCBzZXR0aW5ncy5icmVha3BvaW50cyk7XG4gIH1cblxuICByZXR1cm4gb3B0aW9ucztcbn1cblxudmFyIEV2ZW50c0J1cyA9IGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIEV2ZW50QnVzIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRzXG4gICAqL1xuICBmdW5jdGlvbiBFdmVudHNCdXMoKSB7XG4gICAgdmFyIGV2ZW50cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgRXZlbnRzQnVzKTtcblxuICAgIHRoaXMuZXZlbnRzID0gZXZlbnRzO1xuICAgIHRoaXMuaG9wID0gZXZlbnRzLmhhc093blByb3BlcnR5O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgbGlzdGVuZXIgdG8gdGhlIHNwZWNpZmVkIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gZXZlbnRcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlclxuICAgKi9cblxuXG4gIGNyZWF0ZUNsYXNzKEV2ZW50c0J1cywgW3tcbiAgICBrZXk6ICdvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uKGV2ZW50LCBoYW5kbGVyKSB7XG4gICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRoaXMub24oZXZlbnRbaV0sIGhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgZXZlbnQncyBvYmplY3QgaWYgbm90IHlldCBjcmVhdGVkXG4gICAgICBpZiAoIXRoaXMuaG9wLmNhbGwodGhpcy5ldmVudHMsIGV2ZW50KSkge1xuICAgICAgICB0aGlzLmV2ZW50c1tldmVudF0gPSBbXTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHRoZSBoYW5kbGVyIHRvIHF1ZXVlXG4gICAgICB2YXIgaW5kZXggPSB0aGlzLmV2ZW50c1tldmVudF0ucHVzaChoYW5kbGVyKSAtIDE7XG5cbiAgICAgIC8vIFByb3ZpZGUgaGFuZGxlIGJhY2sgZm9yIHJlbW92YWwgb2YgZXZlbnRcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmV2ZW50c1tldmVudF1baW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgcmVnaXN0ZXJlZCBoYW5kbGVycyBmb3Igc3BlY2lmaWVkIGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IGV2ZW50XG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBjb250ZXh0XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2VtaXQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlbWl0KGV2ZW50LCBjb250ZXh0KSB7XG4gICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRoaXMuZW1pdChldmVudFtpXSwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIGV2ZW50IGRvZXNuJ3QgZXhpc3QsIG9yIHRoZXJlJ3Mgbm8gaGFuZGxlcnMgaW4gcXVldWUsIGp1c3QgbGVhdmVcbiAgICAgIGlmICghdGhpcy5ob3AuY2FsbCh0aGlzLmV2ZW50cywgZXZlbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQ3ljbGUgdGhyb3VnaCBldmVudHMgcXVldWUsIGZpcmUhXG4gICAgICB0aGlzLmV2ZW50c1tldmVudF0uZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICBpdGVtKGNvbnRleHQgfHwge30pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBFdmVudHNCdXM7XG59KCk7XG5cbnZhciBHbGlkZSA9IGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBnbGlkZS5cbiAgICpcbiAgICogQHBhcmFtICB7U3RyaW5nfSBzZWxlY3RvclxuICAgKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIEdsaWRlKHNlbGVjdG9yKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIEdsaWRlKTtcblxuICAgIHRoaXMuX2MgPSB7fTtcbiAgICB0aGlzLl90ID0gW107XG4gICAgdGhpcy5fZSA9IG5ldyBFdmVudHNCdXMoKTtcblxuICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7XG4gICAgdGhpcy5zZXR0aW5ncyA9IG1lcmdlT3B0aW9ucyhkZWZhdWx0cywgb3B0aW9ucyk7XG4gICAgdGhpcy5pbmRleCA9IHRoaXMuc2V0dGluZ3Muc3RhcnRBdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBnbGlkZS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGV4dGVuc2lvbnMgQ29sbGVjdGlvbiBvZiBleHRlbnNpb25zIHRvIGluaXRpYWxpemUuXG4gICAqIEByZXR1cm4ge0dsaWRlfVxuICAgKi9cblxuXG4gIGNyZWF0ZUNsYXNzKEdsaWRlLCBbe1xuICAgIGtleTogJ21vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gbW91bnQkJDEoKSB7XG4gICAgICB2YXIgZXh0ZW5zaW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG5cbiAgICAgIHRoaXMuX2UuZW1pdCgnbW91bnQuYmVmb3JlJyk7XG5cbiAgICAgIGlmIChpc09iamVjdChleHRlbnNpb25zKSkge1xuICAgICAgICB0aGlzLl9jID0gbW91bnQodGhpcywgZXh0ZW5zaW9ucywgdGhpcy5fZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YXJuKCdZb3UgbmVlZCB0byBwcm92aWRlIGEgb2JqZWN0IG9uIGBtb3VudCgpYCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9lLmVtaXQoJ21vdW50LmFmdGVyJyk7XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbGxlY3RzIGFuIGluc3RhbmNlIGB0cmFuc2xhdGVgIHRyYW5zZm9ybWVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAge0FycmF5fSB0cmFuc2Zvcm1lcnMgQ29sbGVjdGlvbiBvZiB0cmFuc2Zvcm1lcnMuXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnbXV0YXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gbXV0YXRlKCkge1xuICAgICAgdmFyIHRyYW5zZm9ybWVycyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogW107XG5cbiAgICAgIGlmIChpc0FycmF5KHRyYW5zZm9ybWVycykpIHtcbiAgICAgICAgdGhpcy5fdCA9IHRyYW5zZm9ybWVycztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm4oJ1lvdSBuZWVkIHRvIHByb3ZpZGUgYSBhcnJheSBvbiBgbXV0YXRlKClgJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgZ2xpZGUgd2l0aCBzcGVjaWZpZWQgc2V0dGluZ3MuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc2V0dGluZ3NcbiAgICAgKiBAcmV0dXJuIHtHbGlkZX1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAndXBkYXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgdmFyIHNldHRpbmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuICAgICAgdGhpcy5zZXR0aW5ncyA9IG1lcmdlT3B0aW9ucyh0aGlzLnNldHRpbmdzLCBzZXR0aW5ncyk7XG5cbiAgICAgIGlmIChzZXR0aW5ncy5oYXNPd25Qcm9wZXJ0eSgnc3RhcnRBdCcpKSB7XG4gICAgICAgIHRoaXMuaW5kZXggPSBzZXR0aW5ncy5zdGFydEF0O1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9lLmVtaXQoJ3VwZGF0ZScpO1xuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2Ugc2xpZGUgd2l0aCBzcGVjaWZpZWQgcGF0dGVybi4gQSBwYXR0ZXJuIG11c3QgYmUgaW4gdGhlIHNwZWNpYWwgZm9ybWF0OlxuICAgICAqIGA+YCAtIE1vdmUgb25lIGZvcndhcmRcbiAgICAgKiBgPGAgLSBNb3ZlIG9uZSBiYWNrd2FyZFxuICAgICAqIGA9e2l9YCAtIEdvIHRvIHtpfSB6ZXJvLWJhc2VkIHNsaWRlIChlcS4gJz0xJywgd2lsbCBnbyB0byBzZWNvbmQgc2xpZGUpXG4gICAgICogYD4+YCAtIFJld2luZHMgdG8gZW5kIChsYXN0IHNsaWRlKVxuICAgICAqIGA8PGAgLSBSZXdpbmRzIHRvIHN0YXJ0IChmaXJzdCBzbGlkZSlcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwYXR0ZXJuXG4gICAgICogQHJldHVybiB7R2xpZGV9XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2dvJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ28ocGF0dGVybikge1xuICAgICAgdGhpcy5fYy5SdW4ubWFrZShwYXR0ZXJuKTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW92ZSB0cmFjayBieSBzcGVjaWZpZWQgZGlzdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZGlzdGFuY2VcbiAgICAgKiBAcmV0dXJuIHtHbGlkZX1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnbW92ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG1vdmUoZGlzdGFuY2UpIHtcbiAgICAgIHRoaXMuX2MuVHJhbnNpdGlvbi5kaXNhYmxlKCk7XG4gICAgICB0aGlzLl9jLk1vdmUubWFrZShkaXN0YW5jZSk7XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc3Ryb3kgaW5zdGFuY2UgYW5kIHJldmVydCBhbGwgY2hhbmdlcyBkb25lIGJ5IHRoaXMuX2MuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtHbGlkZX1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZGVzdHJveScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB0aGlzLl9lLmVtaXQoJ2Rlc3Ryb3knKTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RhcnQgaW5zdGFuY2UgYXV0b3BsYXlpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW58TnVtYmVyfSBpbnRlcnZhbCBSdW4gYXV0b3BsYXlpbmcgd2l0aCBwYXNzZWQgaW50ZXJ2YWwgcmVnYXJkbGVzcyBvZiBgYXV0b3BsYXlgIHNldHRpbmdzXG4gICAgICogQHJldHVybiB7R2xpZGV9XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3BsYXknLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwbGF5KCkge1xuICAgICAgdmFyIGludGVydmFsID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcblxuICAgICAgaWYgKGludGVydmFsKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZ3MuYXV0b3BsYXkgPSBpbnRlcnZhbDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZS5lbWl0KCdwbGF5Jyk7XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0b3AgaW5zdGFuY2UgYXV0b3BsYXlpbmcuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtHbGlkZX1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAncGF1c2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXVzZSgpIHtcbiAgICAgIHRoaXMuX2UuZW1pdCgncGF1c2UnKTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBnbGlkZSBpbnRvIGEgaWRsZSBzdGF0dXMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtHbGlkZX1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZGlzYWJsZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBnbGlkZSBpbnRvIGEgYWN0aXZlIHN0YXR1cy5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge0dsaWRlfVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdlbmFibGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlbmFibGUoKSB7XG4gICAgICB0aGlzLmRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgY3V1dG9tIGV2ZW50IGxpc3RlbmVyIHdpdGggaGFuZGxlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAge1N0cmluZ3xBcnJheX0gZXZlbnRcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gaGFuZGxlclxuICAgICAqIEByZXR1cm4ge0dsaWRlfVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uKGV2ZW50LCBoYW5kbGVyKSB7XG4gICAgICB0aGlzLl9lLm9uKGV2ZW50LCBoYW5kbGVyKTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGdsaWRlIGlzIGEgcHJlY2lzZWQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAge1N0cmluZ30gbmFtZVxuICAgICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2lzVHlwZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzVHlwZShuYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy50eXBlID09PSBuYW1lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdmFsdWUgb2YgdGhlIGNvcmUgb3B0aW9ucy5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnc2V0dGluZ3MnLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0JCQxKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX287XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB2YWx1ZSBvZiB0aGUgY29yZSBvcHRpb25zLlxuICAgICAqXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBvXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICAsXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQkJDEobykge1xuICAgICAgaWYgKGlzT2JqZWN0KG8pKSB7XG4gICAgICAgIHRoaXMuX28gPSBvO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2FybignT3B0aW9ucyBtdXN0IGJlIGFuIGBvYmplY3RgIGluc3RhbmNlLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgY3VycmVudCBpbmRleCBvZiB0aGUgc2xpZGVyLlxuICAgICAqXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpbmRleCcsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5faTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGN1cnJlbnQgaW5kZXggYSBzbGlkZXIuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAgICovXG4gICAgLFxuICAgIHNldDogZnVuY3Rpb24gc2V0JCQxKGkpIHtcbiAgICAgIHRoaXMuX2kgPSB0b0ludChpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHR5cGUgbmFtZSBvZiB0aGUgc2xpZGVyLlxuICAgICAqXG4gICAgICogQHJldHVybiB7U3RyaW5nfVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICd0eXBlJyxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCQkMSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB2YWx1ZSBvZiB0aGUgaWRsZSBzdGF0dXMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdkaXNhYmxlZCcsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHZhbHVlIG9mIHRoZSBpZGxlIHN0YXR1cy5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAgICovXG4gICAgLFxuICAgIHNldDogZnVuY3Rpb24gc2V0JCQxKHN0YXR1cykge1xuICAgICAgdGhpcy5fZCA9ICEhc3RhdHVzO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gR2xpZGU7XG59KCk7XG5cbmZ1bmN0aW9uIFJ1biAoR2xpZGUsIENvbXBvbmVudHMsIEV2ZW50cykge1xuICB2YXIgUnVuID0ge1xuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIGF1dG9ydW5uaW5nIG9mIHRoZSBnbGlkZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1ZvaWR9XG4gICAgICovXG4gICAgbW91bnQ6IGZ1bmN0aW9uIG1vdW50KCkge1xuICAgICAgdGhpcy5fbyA9IGZhbHNlO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIE1ha2VzIGdsaWRlcyBydW5uaW5nIGJhc2VkIG9uIHRoZSBwYXNzZWQgbW92aW5nIHNjaGVtYS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtb3ZlXG4gICAgICovXG4gICAgbWFrZTogZnVuY3Rpb24gbWFrZShtb3ZlKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAoIUdsaWRlLmRpc2FibGVkKSB7XG4gICAgICAgIEdsaWRlLmRpc2FibGUoKTtcblxuICAgICAgICB0aGlzLm1vdmUgPSBtb3ZlO1xuXG4gICAgICAgIEV2ZW50cy5lbWl0KCdydW4uYmVmb3JlJywgdGhpcy5tb3ZlKTtcblxuICAgICAgICB0aGlzLmNhbGN1bGF0ZSgpO1xuXG4gICAgICAgIEV2ZW50cy5lbWl0KCdydW4nLCB0aGlzLm1vdmUpO1xuXG4gICAgICAgIENvbXBvbmVudHMuVHJhbnNpdGlvbi5hZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKF90aGlzLmlzU3RhcnQoKSkge1xuICAgICAgICAgICAgRXZlbnRzLmVtaXQoJ3J1bi5zdGFydCcsIF90aGlzLm1vdmUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChfdGhpcy5pc0VuZCgpKSB7XG4gICAgICAgICAgICBFdmVudHMuZW1pdCgncnVuLmVuZCcsIF90aGlzLm1vdmUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChfdGhpcy5pc09mZnNldCgnPCcpIHx8IF90aGlzLmlzT2Zmc2V0KCc+JykpIHtcbiAgICAgICAgICAgIF90aGlzLl9vID0gZmFsc2U7XG5cbiAgICAgICAgICAgIEV2ZW50cy5lbWl0KCdydW4ub2Zmc2V0JywgX3RoaXMubW92ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgRXZlbnRzLmVtaXQoJ3J1bi5hZnRlcicsIF90aGlzLm1vdmUpO1xuXG4gICAgICAgICAgR2xpZGUuZW5hYmxlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgY3VycmVudCBpbmRleCBiYXNlZCBvbiBkZWZpbmVkIG1vdmUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtWb2lkfVxuICAgICAqL1xuICAgIGNhbGN1bGF0ZTogZnVuY3Rpb24gY2FsY3VsYXRlKCkge1xuICAgICAgdmFyIG1vdmUgPSB0aGlzLm1vdmUsXG4gICAgICAgICAgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgICB2YXIgc3RlcHMgPSBtb3ZlLnN0ZXBzLFxuICAgICAgICAgIGRpcmVjdGlvbiA9IG1vdmUuZGlyZWN0aW9uO1xuXG5cbiAgICAgIHZhciBjb3VudGFibGVTdGVwcyA9IGlzTnVtYmVyKHRvSW50KHN0ZXBzKSkgJiYgdG9JbnQoc3RlcHMpICE9PSAwO1xuXG4gICAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgICBjYXNlICc+JzpcbiAgICAgICAgICBpZiAoc3RlcHMgPT09ICc+Jykge1xuICAgICAgICAgICAgR2xpZGUuaW5kZXggPSBsZW5ndGg7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRW5kKCkpIHtcbiAgICAgICAgICAgIGlmICghKEdsaWRlLmlzVHlwZSgnc2xpZGVyJykgJiYgIUdsaWRlLnNldHRpbmdzLnJld2luZCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fbyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgR2xpZGUuaW5kZXggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoY291bnRhYmxlU3RlcHMpIHtcbiAgICAgICAgICAgIEdsaWRlLmluZGV4ICs9IE1hdGgubWluKGxlbmd0aCAtIEdsaWRlLmluZGV4LCAtdG9JbnQoc3RlcHMpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgR2xpZGUuaW5kZXgrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgaWYgKHN0ZXBzID09PSAnPCcpIHtcbiAgICAgICAgICAgIEdsaWRlLmluZGV4ID0gMDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNTdGFydCgpKSB7XG4gICAgICAgICAgICBpZiAoIShHbGlkZS5pc1R5cGUoJ3NsaWRlcicpICYmICFHbGlkZS5zZXR0aW5ncy5yZXdpbmQpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX28gPSB0cnVlO1xuXG4gICAgICAgICAgICAgIEdsaWRlLmluZGV4ID0gbGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoY291bnRhYmxlU3RlcHMpIHtcbiAgICAgICAgICAgIEdsaWRlLmluZGV4IC09IE1hdGgubWluKEdsaWRlLmluZGV4LCB0b0ludChzdGVwcykpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBHbGlkZS5pbmRleC0tO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICc9JzpcbiAgICAgICAgICBHbGlkZS5pbmRleCA9IHN0ZXBzO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgd2FybignSW52YWxpZCBkaXJlY3Rpb24gcGF0dGVybiBbJyArIGRpcmVjdGlvbiArIHN0ZXBzICsgJ10gaGFzIGJlZW4gdXNlZCcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB3ZSBhcmUgb24gdGhlIGZpcnN0IHNsaWRlLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1N0YXJ0OiBmdW5jdGlvbiBpc1N0YXJ0KCkge1xuICAgICAgcmV0dXJuIEdsaWRlLmluZGV4ID09PSAwO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB3ZSBhcmUgb24gdGhlIGxhc3Qgc2xpZGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgICAqL1xuICAgIGlzRW5kOiBmdW5jdGlvbiBpc0VuZCgpIHtcbiAgICAgIHJldHVybiBHbGlkZS5pbmRleCA9PT0gdGhpcy5sZW5ndGg7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHdlIGFyZSBtYWtpbmcgYSBvZmZzZXQgcnVuLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGRpcmVjdGlvblxuICAgICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAgICovXG4gICAgaXNPZmZzZXQ6IGZ1bmN0aW9uIGlzT2Zmc2V0KGRpcmVjdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuX28gJiYgdGhpcy5tb3ZlLmRpcmVjdGlvbiA9PT0gZGlyZWN0aW9uO1xuICAgIH1cbiAgfTtcblxuICBkZWZpbmUoUnVuLCAnbW92ZScsIHtcbiAgICAvKipcbiAgICAgKiBHZXRzIHZhbHVlIG9mIHRoZSBtb3ZlIHNjaGVtYS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgICovXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbTtcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHZhbHVlIG9mIHRoZSBtb3ZlIHNjaGVtYS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgICovXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgIHZhciBzdGVwID0gdmFsdWUuc3Vic3RyKDEpO1xuXG4gICAgICB0aGlzLl9tID0ge1xuICAgICAgICBkaXJlY3Rpb246IHZhbHVlLnN1YnN0cigwLCAxKSxcbiAgICAgICAgc3RlcHM6IHN0ZXAgPyB0b0ludChzdGVwKSA/IHRvSW50KHN0ZXApIDogc3RlcCA6IDBcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICBkZWZpbmUoUnVuLCAnbGVuZ3RoJywge1xuICAgIC8qKlxuICAgICAqIEdldHMgdmFsdWUgb2YgdGhlIHJ1bm5pbmcgZGlzdGFuY2UgYmFzZWRcbiAgICAgKiBvbiB6ZXJvLWluZGV4aW5nIG51bWJlciBvZiBzbGlkZXMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9XG4gICAgICovXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgc2V0dGluZ3MgPSBHbGlkZS5zZXR0aW5ncztcbiAgICAgIHZhciBsZW5ndGggPSBDb21wb25lbnRzLkh0bWwuc2xpZGVzLmxlbmd0aDtcblxuICAgICAgLy8gSWYgdGhlIGBib3VuZGAgb3B0aW9uIGlzIGFjaXR2ZSwgYSBtYXhpbXVtIHJ1bm5pbmcgZGlzdGFuY2Ugc2hvdWxkIGJlXG4gICAgICAvLyByZWR1Y2VkIGJ5IGBwZXJWaWV3YCBhbmQgYGZvY3VzQXRgIHNldHRpbmdzLiBSdW5uaW5nIGRpc3RhbmNlXG4gICAgICAvLyBzaG91bGQgZW5kIGJlZm9yZSBjcmVhdGluZyBhbiBlbXB0eSBzcGFjZSBhZnRlciBpbnN0YW5jZS5cblxuICAgICAgaWYgKEdsaWRlLmlzVHlwZSgnc2xpZGVyJykgJiYgc2V0dGluZ3MuZm9jdXNBdCAhPT0gJ2NlbnRlcicgJiYgc2V0dGluZ3MuYm91bmQpIHtcbiAgICAgICAgcmV0dXJuIGxlbmd0aCAtIDEgLSAodG9JbnQoc2V0dGluZ3MucGVyVmlldykgLSAxKSArIHRvSW50KHNldHRpbmdzLmZvY3VzQXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGVuZ3RoIC0gMTtcbiAgICB9XG4gIH0pO1xuXG4gIGRlZmluZShSdW4sICdvZmZzZXQnLCB7XG4gICAgLyoqXG4gICAgICogR2V0cyBzdGF0dXMgb2YgdGhlIG9mZnNldHRpbmcgZmxhZy5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAgICovXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbztcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBSdW47XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGN1cnJlbnQgdGltZS5cbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIG5vdygpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgd2hlbiBpbnZva2VkLCB3aWxsIG9ubHkgYmUgdHJpZ2dlcmVkXG4gKiBhdCBtb3N0IG9uY2UgZHVyaW5nIGEgZ2l2ZW4gd2luZG93IG9mIHRpbWUuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuY1xuICogQHBhcmFtIHtOdW1iZXJ9IHdhaXRcbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9uc1xuICogQHJldHVybiB7RnVuY3Rpb259XG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmVcbiAqL1xuZnVuY3Rpb24gdGhyb3R0bGUoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICB2YXIgdGltZW91dCA9IHZvaWQgMCxcbiAgICAgIGNvbnRleHQgPSB2b2lkIDAsXG4gICAgICBhcmdzID0gdm9pZCAwLFxuICAgICAgcmVzdWx0ID0gdm9pZCAwO1xuICB2YXIgcHJldmlvdXMgPSAwO1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcblxuICB2YXIgbGF0ZXIgPSBmdW5jdGlvbiBsYXRlcigpIHtcbiAgICBwcmV2aW91cyA9IG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UgPyAwIDogbm93KCk7XG4gICAgdGltZW91dCA9IG51bGw7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgfTtcblxuICB2YXIgdGhyb3R0bGVkID0gZnVuY3Rpb24gdGhyb3R0bGVkKCkge1xuICAgIHZhciBhdCA9IG5vdygpO1xuICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkgcHJldmlvdXMgPSBhdDtcbiAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChhdCAtIHByZXZpb3VzKTtcbiAgICBjb250ZXh0ID0gdGhpcztcbiAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCByZW1haW5pbmcgPiB3YWl0KSB7XG4gICAgICBpZiAodGltZW91dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgfVxuICAgICAgcHJldmlvdXMgPSBhdDtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKCF0aW1lb3V0ICYmIG9wdGlvbnMudHJhaWxpbmcgIT09IGZhbHNlKSB7XG4gICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB0aHJvdHRsZWQuY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICBwcmV2aW91cyA9IDA7XG4gICAgdGltZW91dCA9IGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gdGhyb3R0bGVkO1xufVxuXG52YXIgTUFSR0lOX1RZUEUgPSB7XG4gIGx0cjogWydtYXJnaW5MZWZ0JywgJ21hcmdpblJpZ2h0J10sXG4gIHJ0bDogWydtYXJnaW5SaWdodCcsICdtYXJnaW5MZWZ0J11cbn07XG5cbmZ1bmN0aW9uIEdhcHMgKEdsaWRlLCBDb21wb25lbnRzLCBFdmVudHMpIHtcbiAgdmFyIEdhcHMgPSB7XG4gICAgLyoqXG4gICAgICogQXBwbGllcyBnYXBzIGJldHdlZW4gc2xpZGVzLiBGaXJzdCBhbmQgbGFzdFxuICAgICAqIHNsaWRlcyBkbyBub3QgcmVjZWl2ZSBpdCdzIGVkZ2UgbWFyZ2lucy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7SFRNTENvbGxlY3Rpb259IHNsaWRlc1xuICAgICAqIEByZXR1cm4ge1ZvaWR9XG4gICAgICovXG4gICAgYXBwbHk6IGZ1bmN0aW9uIGFwcGx5KHNsaWRlcykge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHNsaWRlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgc3R5bGUgPSBzbGlkZXNbaV0uc3R5bGU7XG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBDb21wb25lbnRzLkRpcmVjdGlvbi52YWx1ZTtcblxuICAgICAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgICAgIHN0eWxlW01BUkdJTl9UWVBFW2RpcmVjdGlvbl1bMF1dID0gdGhpcy52YWx1ZSAvIDIgKyAncHgnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0eWxlW01BUkdJTl9UWVBFW2RpcmVjdGlvbl1bMF1dID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaSAhPT0gc2xpZGVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBzdHlsZVtNQVJHSU5fVFlQRVtkaXJlY3Rpb25dWzFdXSA9IHRoaXMudmFsdWUgLyAyICsgJ3B4JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHlsZVtNQVJHSU5fVFlQRVtkaXJlY3Rpb25dWzFdXSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBnYXBzIGZyb20gdGhlIHNsaWRlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7SFRNTENvbGxlY3Rpb259IHNsaWRlc1xuICAgICAqIEByZXR1cm5zIHtWb2lkfVxuICAgICovXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoc2xpZGVzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gc2xpZGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHZhciBzdHlsZSA9IHNsaWRlc1tpXS5zdHlsZTtcblxuICAgICAgICBzdHlsZS5tYXJnaW5MZWZ0ID0gJyc7XG4gICAgICAgIHN0eWxlLm1hcmdpblJpZ2h0ID0gJyc7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGRlZmluZShHYXBzLCAndmFsdWUnLCB7XG4gICAgLyoqXG4gICAgICogR2V0cyB2YWx1ZSBvZiB0aGUgZ2FwLlxuICAgICAqXG4gICAgICogQHJldHVybnMge051bWJlcn1cbiAgICAgKi9cbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0b0ludChHbGlkZS5zZXR0aW5ncy5nYXApO1xuICAgIH1cbiAgfSk7XG5cbiAgZGVmaW5lKEdhcHMsICdncm93Jywge1xuICAgIC8qKlxuICAgICAqIEdldHMgYWRkaXRpb25hbCBkaW1lbnRpb25zIHZhbHVlIGNhdXNlZCBieSBnYXBzLlxuICAgICAqIFVzZWQgdG8gaW5jcmVhc2Ugd2lkdGggb2YgdGhlIHNsaWRlcyB3cmFwcGVyLlxuICAgICAqXG4gICAgICogQHJldHVybnMge051bWJlcn1cbiAgICAgKi9cbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBHYXBzLnZhbHVlICogKENvbXBvbmVudHMuU2l6ZXMubGVuZ3RoIC0gMSk7XG4gICAgfVxuICB9KTtcblxuICBkZWZpbmUoR2FwcywgJ3JlZHVjdG9yJywge1xuICAgIC8qKlxuICAgICAqIEdldHMgcmVkdWN0aW9uIHZhbHVlIGNhdXNlZCBieSBnYXBzLlxuICAgICAqIFVzZWQgdG8gc3VidHJhY3Qgd2lkdGggb2YgdGhlIHNsaWRlcy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtOdW1iZXJ9XG4gICAgICovXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgcGVyVmlldyA9IEdsaWRlLnNldHRpbmdzLnBlclZpZXc7XG5cbiAgICAgIHJldHVybiBHYXBzLnZhbHVlICogKHBlclZpZXcgLSAxKSAvIHBlclZpZXc7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogQXBwbHkgY2FsY3VsYXRlZCBnYXBzOlxuICAgKiAtIGFmdGVyIGJ1aWxkaW5nLCBzbyBzbGlkZXMgKGluY2x1ZGluZyBjbG9uZXMpIHdpbGwgcmVjZWl2ZSBwcm9wZXIgbWFyZ2luc1xuICAgKiAtIG9uIHVwZGF0aW5nIHZpYSBBUEksIHRvIHJlY2FsY3VsYXRlIGdhcHMgd2l0aCBuZXcgb3B0aW9uc1xuICAgKi9cbiAgRXZlbnRzLm9uKFsnYnVpbGQuYWZ0ZXInLCAndXBkYXRlJ10sIHRocm90dGxlKGZ1bmN0aW9uICgpIHtcbiAgICBHYXBzLmFwcGx5KENvbXBvbmVudHMuSHRtbC53cmFwcGVyLmNoaWxkcmVuKTtcbiAgfSwgMzApKTtcblxuICAvKipcbiAgICogUmVtb3ZlIGdhcHM6XG4gICAqIC0gb24gZGVzdHJveWluZyB0byBicmluZyBtYXJrdXAgdG8gaXRzIGluaXRhbCBzdGF0ZVxuICAgKi9cbiAgRXZlbnRzLm9uKCdkZXN0cm95JywgZnVuY3Rpb24gKCkge1xuICAgIEdhcHMucmVtb3ZlKENvbXBvbmVudHMuSHRtbC53cmFwcGVyLmNoaWxkcmVuKTtcbiAgfSk7XG5cbiAgcmV0dXJuIEdhcHM7XG59XG5cbi8qKlxuICogRmluZHMgc2libGluZ3Mgbm9kZXMgb2YgdGhlIHBhc3NlZCBub2RlLlxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IG5vZGVcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5mdW5jdGlvbiBzaWJsaW5ncyhub2RlKSB7XG4gIGlmIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSkge1xuICAgIHZhciBuID0gbm9kZS5wYXJlbnROb2RlLmZpcnN0Q2hpbGQ7XG4gICAgdmFyIG1hdGNoZWQgPSBbXTtcblxuICAgIGZvciAoOyBuOyBuID0gbi5uZXh0U2libGluZykge1xuICAgICAgaWYgKG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gbm9kZSkge1xuICAgICAgICBtYXRjaGVkLnB1c2gobik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZWQ7XG4gIH1cblxuICByZXR1cm4gW107XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHBhc3NlZCBub2RlIGV4aXN0IGFuZCBpcyBhIHZhbGlkIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtICB7RWxlbWVudH0gbm9kZVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZXhpc3Qobm9kZSkge1xuICBpZiAobm9kZSAmJiBub2RlIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBUUkFDS19TRUxFQ1RPUiA9ICdbZGF0YS1nbGlkZS1lbD1cInRyYWNrXCJdJztcblxuZnVuY3Rpb24gSHRtbCAoR2xpZGUsIENvbXBvbmVudHMpIHtcbiAgdmFyIEh0bWwgPSB7XG4gICAgLyoqXG4gICAgICogU2V0dXAgc2xpZGVyIEhUTUwgbm9kZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0dsaWRlfSBnbGlkZVxuICAgICAqL1xuICAgIG1vdW50OiBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAgIHRoaXMucm9vdCA9IEdsaWRlLnNlbGVjdG9yO1xuICAgICAgdGhpcy50cmFjayA9IHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKFRSQUNLX1NFTEVDVE9SKTtcbiAgICAgIHRoaXMuc2xpZGVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy53cmFwcGVyLmNoaWxkcmVuKS5maWx0ZXIoZnVuY3Rpb24gKHNsaWRlKSB7XG4gICAgICAgIHJldHVybiAhc2xpZGUuY2xhc3NMaXN0LmNvbnRhaW5zKEdsaWRlLnNldHRpbmdzLmNsYXNzZXMuY2xvbmVTbGlkZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgZGVmaW5lKEh0bWwsICdyb290Jywge1xuICAgIC8qKlxuICAgICAqIEdldHMgbm9kZSBvZiB0aGUgZ2xpZGUgbWFpbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIEh0bWwuX3I7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogU2V0cyBub2RlIG9mIHRoZSBnbGlkZSBtYWluIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAgICovXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQocikge1xuICAgICAgaWYgKGlzU3RyaW5nKHIpKSB7XG4gICAgICAgIHIgPSB0b3AuZG9jdW1lbnQucXVlcnlTZWxlY3RvcihyKTtcbiAgICAgIH1cbiAgICAgIEh0bWwuX3IgPSByO1xuXG4gICAgICAvKipcbiAgICAgICAqIFJlbW92ZWQgZXhpc3QgdmFsaWRhdGlvblxuICAgICAgICovXG4gICAgICAvLyBpZiAoZXhpc3QocikpIHtcbiAgICAgIC8vICAgSHRtbC5fciA9IHI7XG4gICAgICAvLyB9IGVsc2Uge1xuICAgICAgLy8gICB3YXJuKCdSb290IGVsZW1lbnQgbXVzdCBiZSBhIGV4aXN0aW5nIEh0bWwgbm9kZScpO1xuICAgICAgLy8gfVxuICAgIH1cbiAgfSk7XG5cbiAgZGVmaW5lKEh0bWwsICd0cmFjaycsIHtcbiAgICAvKipcbiAgICAgKiBHZXRzIG5vZGUgb2YgdGhlIGdsaWRlIHRyYWNrIHdpdGggc2xpZGVzLlxuICAgICAqXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIEh0bWwuX3Q7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogU2V0cyBub2RlIG9mIHRoZSBnbGlkZSB0cmFjayB3aXRoIHNsaWRlcy5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgKi9cbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCh0KSB7XG4gICAgICBIdG1sLl90ID0gdDtcblxuICAgICAgLyoqXG4gICAgICAgKiBSZW1vdmVkIGV4aXN0IHZhbGlkYXRpb25cbiAgICAgICAqL1xuICAgICAgLy8gaWYgKGV4aXN0KHQpKSB7XG4gICAgICAvLyAgIEh0bWwuX3QgPSB0O1xuICAgICAgLy8gfSBlbHNlIHtcbiAgICAgIC8vICAgd2FybignQ291bGQgbm90IGZpbmQgdHJhY2sgZWxlbWVudC4gUGxlYXNlIHVzZSAnICsgVFJBQ0tfU0VMRUNUT1IgKyAnIGF0dHJpYnV0ZS4nKTtcbiAgICAgIC8vIH1cbiAgICB9XG4gIH0pO1xuXG4gIGRlZmluZShIdG1sLCAnd3JhcHBlcicsIHtcbiAgICAvKipcbiAgICAgKiBHZXRzIG5vZGUgb2YgdGhlIHNsaWRlcyB3cmFwcGVyLlxuICAgICAqXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIEh0bWwudHJhY2suY2hpbGRyZW5bMF07XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gSHRtbDtcbn1cblxuZnVuY3Rpb24gUGVlayAoR2xpZGUsIENvbXBvbmVudHMsIEV2ZW50cykge1xuICB2YXIgUGVlayA9IHtcbiAgICAvKipcbiAgICAgKiBTZXR1cHMgaG93IG11Y2ggdG8gcGVlayBiYXNlZCBvbiBzZXR0aW5ncy5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1ZvaWR9XG4gICAgICovXG4gICAgbW91bnQ6IGZ1bmN0aW9uIG1vdW50KCkge1xuICAgICAgdGhpcy52YWx1ZSA9IEdsaWRlLnNldHRpbmdzLnBlZWs7XG4gICAgfVxuICB9O1xuXG4gIGRlZmluZShQZWVrLCAndmFsdWUnLCB7XG4gICAgLyoqXG4gICAgICogR2V0cyB2YWx1ZSBvZiB0aGUgcGVlay5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtOdW1iZXJ8T2JqZWN0fVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIFBlZWsuX3Y7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogU2V0cyB2YWx1ZSBvZiB0aGUgcGVlay5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfE9iamVjdH0gdmFsdWVcbiAgICAgKiBAcmV0dXJuIHtWb2lkfVxuICAgICAqL1xuICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmJlZm9yZSA9IHRvSW50KHZhbHVlLmJlZm9yZSk7XG4gICAgICAgIHZhbHVlLmFmdGVyID0gdG9JbnQodmFsdWUuYWZ0ZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSB0b0ludCh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIFBlZWsuX3YgPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGRlZmluZShQZWVrLCAncmVkdWN0b3InLCB7XG4gICAgLyoqXG4gICAgICogR2V0cyByZWR1Y3Rpb24gdmFsdWUgY2F1c2VkIGJ5IHBlZWsuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIHZhbHVlID0gUGVlay52YWx1ZTtcbiAgICAgIHZhciBwZXJWaWV3ID0gR2xpZGUuc2V0dGluZ3MucGVyVmlldztcblxuICAgICAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUuYmVmb3JlIC8gcGVyVmlldyArIHZhbHVlLmFmdGVyIC8gcGVyVmlldztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlICogMiAvIHBlclZpZXc7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogUmVjYWxjdWxhdGUgcGVla2luZyBzaXplcyBvbjpcbiAgICogLSB3aGVuIHJlc2l6aW5nIHdpbmRvdyB0byB1cGRhdGUgdG8gcHJvcGVyIHBlcmNlbnRzXG4gICAqL1xuICBFdmVudHMub24oWydyZXNpemUnLCAndXBkYXRlJ10sIGZ1bmN0aW9uICgpIHtcbiAgICBQZWVrLm1vdW50KCk7XG4gIH0pO1xuXG4gIHJldHVybiBQZWVrO1xufVxuXG5mdW5jdGlvbiBNb3ZlIChHbGlkZSwgQ29tcG9uZW50cywgRXZlbnRzKSB7XG4gIHZhciBNb3ZlID0ge1xuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgbW92ZSBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Vm9pZH1cbiAgICAgKi9cbiAgICBtb3VudDogZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgICB0aGlzLl9vID0gMDtcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIGEgbW92ZW1lbnQgdmFsdWUgYmFzZWQgb24gcGFzc2VkIG9mZnNldCBhbmQgY3VycmVudGx5IGFjdGl2ZSBpbmRleC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAge051bWJlcn0gb2Zmc2V0XG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICBtYWtlOiBmdW5jdGlvbiBtYWtlKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIG9mZnNldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogMDtcblxuICAgICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG5cbiAgICAgIEV2ZW50cy5lbWl0KCdtb3ZlJywge1xuICAgICAgICBtb3ZlbWVudDogdGhpcy52YWx1ZVxuICAgICAgfSk7XG5cbiAgICAgIENvbXBvbmVudHMuVHJhbnNpdGlvbi5hZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgIEV2ZW50cy5lbWl0KCdtb3ZlLmFmdGVyJywge1xuICAgICAgICAgIG1vdmVtZW50OiBfdGhpcy52YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBkZWZpbmUoTW92ZSwgJ29mZnNldCcsIHtcbiAgICAvKipcbiAgICAgKiBHZXRzIGFuIG9mZnNldCB2YWx1ZSB1c2VkIHRvIG1vZGlmeSBjdXJyZW50IHRyYW5zbGF0ZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgKi9cbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBNb3ZlLl9vO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIFNldHMgYW4gb2Zmc2V0IHZhbHVlIHVzZWQgdG8gbW9kaWZ5IGN1cnJlbnQgdHJhbnNsYXRlLlxuICAgICAqXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAqL1xuICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgICBNb3ZlLl9vID0gIWlzVW5kZWZpbmVkKHZhbHVlKSA/IHRvSW50KHZhbHVlKSA6IDA7XG4gICAgfVxuICB9KTtcblxuICBkZWZpbmUoTW92ZSwgJ3RyYW5zbGF0ZScsIHtcbiAgICAvKipcbiAgICAgKiBHZXRzIGEgcmF3IG1vdmVtZW50IHZhbHVlLlxuICAgICAqXG4gICAgICogQHJldHVybiB7TnVtYmVyfVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIENvbXBvbmVudHMuU2l6ZXMuc2xpZGVXaWR0aCAqIEdsaWRlLmluZGV4O1xuICAgIH1cbiAgfSk7XG5cbiAgZGVmaW5lKE1vdmUsICd2YWx1ZScsIHtcbiAgICAvKipcbiAgICAgKiBHZXRzIGFuIGFjdHVhbCBtb3ZlbWVudCB2YWx1ZSBjb3JyZWN0ZWQgYnkgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQHJldHVybiB7TnVtYmVyfVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIG9mZnNldCA9IHRoaXMub2Zmc2V0O1xuICAgICAgdmFyIHRyYW5zbGF0ZSA9IHRoaXMudHJhbnNsYXRlO1xuXG4gICAgICBpZiAoQ29tcG9uZW50cy5EaXJlY3Rpb24uaXMoJ3J0bCcpKSB7XG4gICAgICAgIHJldHVybiB0cmFuc2xhdGUgKyBvZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cmFuc2xhdGUgLSBvZmZzZXQ7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogTWFrZSBtb3ZlbWVudCB0byBwcm9wZXIgc2xpZGUgb246XG4gICAqIC0gYmVmb3JlIGJ1aWxkLCBzbyBnbGlkZSB3aWxsIHN0YXJ0IGF0IGBzdGFydEF0YCBpbmRleFxuICAgKiAtIG9uIGVhY2ggc3RhbmRhcmQgcnVuIHRvIG1vdmUgdG8gbmV3bHkgY2FsY3VsYXRlZCBpbmRleFxuICAgKi9cbiAgRXZlbnRzLm9uKFsnYnVpbGQuYmVmb3JlJywgJ3J1biddLCBmdW5jdGlvbiAoKSB7XG4gICAgTW92ZS5tYWtlKCk7XG4gIH0pO1xuXG4gIHJldHVybiBNb3ZlO1xufVxuXG5mdW5jdGlvbiBTaXplcyAoR2xpZGUsIENvbXBvbmVudHMsIEV2ZW50cykge1xuICB2YXIgU2l6ZXMgPSB7XG4gICAgLyoqXG4gICAgICogU2V0dXBzIGRpbWVudGlvbnMgb2Ygc2xpZGVzLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICBzZXR1cFNsaWRlczogZnVuY3Rpb24gc2V0dXBTbGlkZXMoKSB7XG4gICAgICB2YXIgd2lkdGggPSB0aGlzLnNsaWRlV2lkdGggKyAncHgnO1xuICAgICAgdmFyIHNsaWRlcyA9IENvbXBvbmVudHMuSHRtbC5zbGlkZXM7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHNsaWRlc1tpXS5zdHlsZS53aWR0aCA9IHdpZHRoO1xuICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIFNldHVwcyBkaW1lbnRpb25zIG9mIHNsaWRlcyB3cmFwcGVyLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICBzZXR1cFdyYXBwZXI6IGZ1bmN0aW9uIHNldHVwV3JhcHBlcihkaW1lbnRpb24pIHtcbiAgICAgIENvbXBvbmVudHMuSHRtbC53cmFwcGVyLnN0eWxlLndpZHRoID0gdGhpcy53cmFwcGVyU2l6ZSArICdweCc7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhcHBsaWVkIHN0eWxlcyBmcm9tIEhUTUwgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Vm9pZH1cbiAgICAgKi9cbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgIHZhciBzbGlkZXMgPSBDb21wb25lbnRzLkh0bWwuc2xpZGVzO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzbGlkZXNbaV0uc3R5bGUud2lkdGggPSAnJztcbiAgICAgIH1cblxuICAgICAgQ29tcG9uZW50cy5IdG1sLndyYXBwZXIuc3R5bGUud2lkdGggPSAnJztcbiAgICB9XG4gIH07XG5cbiAgZGVmaW5lKFNpemVzLCAnbGVuZ3RoJywge1xuICAgIC8qKlxuICAgICAqIEdldHMgY291bnQgbnVtYmVyIG9mIHRoZSBzbGlkZXMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9XG4gICAgICovXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gQ29tcG9uZW50cy5IdG1sLnNsaWRlcy5sZW5ndGg7XG4gICAgfVxuICB9KTtcblxuICBkZWZpbmUoU2l6ZXMsICd3aWR0aCcsIHtcbiAgICAvKipcbiAgICAgKiBHZXRzIHdpZHRoIHZhbHVlIG9mIHRoZSBnbGlkZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge051bWJlcn1cbiAgICAgKi9cbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBDb21wb25lbnRzLkh0bWwucm9vdC5vZmZzZXRXaWR0aDtcbiAgICB9XG4gIH0pO1xuXG4gIGRlZmluZShTaXplcywgJ3dyYXBwZXJTaXplJywge1xuICAgIC8qKlxuICAgICAqIEdldHMgc2l6ZSBvZiB0aGUgc2xpZGVzIHdyYXBwZXIuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9XG4gICAgICovXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gU2l6ZXMuc2xpZGVXaWR0aCAqIFNpemVzLmxlbmd0aCArIENvbXBvbmVudHMuR2Fwcy5ncm93ICsgQ29tcG9uZW50cy5DbG9uZXMuZ3JvdztcbiAgICB9XG4gIH0pO1xuXG4gIGRlZmluZShTaXplcywgJ3NsaWRlV2lkdGgnLCB7XG4gICAgLyoqXG4gICAgICogR2V0cyB3aWR0aCB2YWx1ZSBvZiB0aGUgc2luZ2xlIHNsaWRlLlxuICAgICAqXG4gICAgICogQHJldHVybiB7TnVtYmVyfVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIFNpemVzLndpZHRoIC8gR2xpZGUuc2V0dGluZ3MucGVyVmlldyAtIENvbXBvbmVudHMuUGVlay5yZWR1Y3RvciAtIENvbXBvbmVudHMuR2Fwcy5yZWR1Y3RvcjtcbiAgICB9XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBcHBseSBjYWxjdWxhdGVkIGdsaWRlJ3MgZGltZW5zaW9uczpcbiAgICogLSBiZWZvcmUgYnVpbGRpbmcsIHNvIG90aGVyIGRpbWVudGlvbnMgKGUuZy4gdHJhbnNsYXRlKSB3aWxsIGJlIGNhbGN1bGF0ZWQgcHJvcGVydGx5XG4gICAqIC0gd2hlbiByZXNpemluZyB3aW5kb3cgdG8gcmVjYWxjdWxhdGUgc2lsZGVzIGRpbWVuc2lvbnNcbiAgICogLSBvbiB1cGRhdGluZyB2aWEgQVBJLCB0byBjYWxjdWxhdGUgZGltZW5zaW9ucyBiYXNlZCBvbiBuZXcgb3B0aW9uc1xuICAgKi9cbiAgRXZlbnRzLm9uKFsnYnVpbGQuYmVmb3JlJywgJ3Jlc2l6ZScsICd1cGRhdGUnXSwgZnVuY3Rpb24gKCkge1xuICAgIFNpemVzLnNldHVwU2xpZGVzKCk7XG4gICAgU2l6ZXMuc2V0dXBXcmFwcGVyKCk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgY2FsY3VsYXRlZCBnbGlkZSdzIGRpbWVuc2lvbnM6XG4gICAqIC0gb24gZGVzdG90aW5nIHRvIGJyaW5nIG1hcmt1cCB0byBpdHMgaW5pdGFsIHN0YXRlXG4gICAqL1xuICBFdmVudHMub24oJ2Rlc3Ryb3knLCBmdW5jdGlvbiAoKSB7XG4gICAgU2l6ZXMucmVtb3ZlKCk7XG4gIH0pO1xuXG4gIHJldHVybiBTaXplcztcbn1cblxuZnVuY3Rpb24gQnVpbGQgKEdsaWRlLCBDb21wb25lbnRzLCBFdmVudHMpIHtcbiAgdmFyIEJ1aWxkID0ge1xuICAgIC8qKlxuICAgICAqIEluaXQgZ2xpZGUgYnVpbGRpbmcuIEFkZHMgY2xhc3Nlcywgc2V0c1xuICAgICAqIGRpbWVuc2lvbnMgYW5kIHNldHVwcyBpbml0aWFsIHN0YXRlLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICBtb3VudDogZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgICBFdmVudHMuZW1pdCgnYnVpbGQuYmVmb3JlJyk7XG5cbiAgICAgIHRoaXMudHlwZUNsYXNzKCk7XG4gICAgICB0aGlzLmFjdGl2ZUNsYXNzKCk7XG5cbiAgICAgIEV2ZW50cy5lbWl0KCdidWlsZC5hZnRlcicpO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYHR5cGVgIGNsYXNzIHRvIHRoZSBnbGlkZSBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICB0eXBlQ2xhc3M6IGZ1bmN0aW9uIHR5cGVDbGFzcygpIHtcbiAgICAgIENvbXBvbmVudHMuSHRtbC5yb290LmNsYXNzTGlzdC5hZGQoR2xpZGUuc2V0dGluZ3MuY2xhc3Nlc1tHbGlkZS5zZXR0aW5ncy50eXBlXSk7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhY3RpdmUgY2xhc3MgdG8gY3VycmVudCBzbGlkZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1ZvaWR9XG4gICAgICovXG4gICAgYWN0aXZlQ2xhc3M6IGZ1bmN0aW9uIGFjdGl2ZUNsYXNzKCkge1xuICAgICAgdmFyIGNsYXNzZXMgPSBHbGlkZS5zZXR0aW5ncy5jbGFzc2VzO1xuICAgICAgdmFyIHNsaWRlID0gQ29tcG9uZW50cy5IdG1sLnNsaWRlc1tHbGlkZS5pbmRleF07XG5cbiAgICAgIGlmIChzbGlkZSkge1xuICAgICAgICBzbGlkZS5jbGFzc0xpc3QuYWRkKGNsYXNzZXMuYWN0aXZlU2xpZGUpO1xuXG4gICAgICAgIHNpYmxpbmdzKHNsaWRlKS5mb3JFYWNoKGZ1bmN0aW9uIChzaWJsaW5nKSB7XG4gICAgICAgICAgc2libGluZy5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzZXMuYWN0aXZlU2xpZGUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIEhUTUwgY2xhc3NlcyBhcHBsaWVkIGF0IGJ1aWxkaW5nLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICByZW1vdmVDbGFzc2VzOiBmdW5jdGlvbiByZW1vdmVDbGFzc2VzKCkge1xuICAgICAgdmFyIGNsYXNzZXMgPSBHbGlkZS5zZXR0aW5ncy5jbGFzc2VzO1xuXG4gICAgICBDb21wb25lbnRzLkh0bWwucm9vdC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzZXNbR2xpZGUuc2V0dGluZ3MudHlwZV0pO1xuXG4gICAgICBDb21wb25lbnRzLkh0bWwuc2xpZGVzLmZvckVhY2goZnVuY3Rpb24gKHNpYmxpbmcpIHtcbiAgICAgICAgc2libGluZy5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzZXMuYWN0aXZlU2xpZGUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBDbGVhciBidWlsZGluZyBjbGFzc2VzOlxuICAgKiAtIG9uIGRlc3Ryb3lpbmcgdG8gYnJpbmcgSFRNTCB0byBpdHMgaW5pdGlhbCBzdGF0ZVxuICAgKiAtIG9uIHVwZGF0aW5nIHRvIHJlbW92ZSBjbGFzc2VzIGJlZm9yZSByZW1vdW50aW5nIGNvbXBvbmVudFxuICAgKi9cbiAgRXZlbnRzLm9uKFsnZGVzdHJveScsICd1cGRhdGUnXSwgZnVuY3Rpb24gKCkge1xuICAgIEJ1aWxkLnJlbW92ZUNsYXNzZXMoKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFJlbW91bnQgY29tcG9uZW50OlxuICAgKiAtIG9uIHJlc2l6aW5nIG9mIHRoZSB3aW5kb3cgdG8gY2FsY3VsYXRlIG5ldyBkaW1lbnRpb25zXG4gICAqIC0gb24gdXBkYXRpbmcgc2V0dGluZ3MgdmlhIEFQSVxuICAgKi9cbiAgRXZlbnRzLm9uKFsncmVzaXplJywgJ3VwZGF0ZSddLCBmdW5jdGlvbiAoKSB7XG4gICAgQnVpbGQubW91bnQoKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFN3YXAgYWN0aXZlIGNsYXNzIG9mIGN1cnJlbnQgc2xpZGU6XG4gICAqIC0gYWZ0ZXIgZWFjaCBtb3ZlIHRvIHRoZSBuZXcgaW5kZXhcbiAgICovXG4gIEV2ZW50cy5vbignbW92ZS5hZnRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBCdWlsZC5hY3RpdmVDbGFzcygpO1xuICB9KTtcblxuICByZXR1cm4gQnVpbGQ7XG59XG5cbmZ1bmN0aW9uIENsb25lcyAoR2xpZGUsIENvbXBvbmVudHMsIEV2ZW50cykge1xuICB2YXIgQ2xvbmVzID0ge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZSBwYXR0ZXJuIG1hcCBhbmQgY29sbGVjdCBzbGlkZXMgdG8gYmUgY2xvbmVkLlxuICAgICAqL1xuICAgIG1vdW50OiBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAgIHRoaXMuaXRlbXMgPSBbXTtcblxuICAgICAgaWYgKEdsaWRlLmlzVHlwZSgnY2Fyb3VzZWwnKSkge1xuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5jb2xsZWN0KCk7XG4gICAgICB9XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogQ29sbGVjdCBjbG9uZXMgd2l0aCBwYXR0ZXJuLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICBjb2xsZWN0OiBmdW5jdGlvbiBjb2xsZWN0KCkge1xuICAgICAgdmFyIGl0ZW1zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBbXTtcbiAgICAgIHZhciBzbGlkZXMgPSBDb21wb25lbnRzLkh0bWwuc2xpZGVzO1xuICAgICAgdmFyIF9HbGlkZSRzZXR0aW5ncyA9IEdsaWRlLnNldHRpbmdzLFxuICAgICAgICAgIHBlclZpZXcgPSBfR2xpZGUkc2V0dGluZ3MucGVyVmlldyxcbiAgICAgICAgICBjbGFzc2VzID0gX0dsaWRlJHNldHRpbmdzLmNsYXNzZXM7XG5cblxuICAgICAgdmFyIHBlZWtJbmNyZW1lbnRlciA9ICshIUdsaWRlLnNldHRpbmdzLnBlZWs7XG4gICAgICB2YXIgcGFydCA9IHBlclZpZXcgKyBwZWVrSW5jcmVtZW50ZXI7XG4gICAgICB2YXIgc3RhcnQgPSBzbGlkZXMuc2xpY2UoMCwgcGFydCk7XG4gICAgICB2YXIgZW5kID0gc2xpZGVzLnNsaWNlKC1wYXJ0KTtcblxuICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHBlclZpZXcgLyBzbGlkZXMubGVuZ3RoKSk7IHIrKykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGNsb25lID0gc3RhcnRbaV0uY2xvbmVOb2RlKHRydWUpO1xuXG4gICAgICAgICAgY2xvbmUuY2xhc3NMaXN0LmFkZChjbGFzc2VzLmNsb25lU2xpZGUpO1xuXG4gICAgICAgICAgaXRlbXMucHVzaChjbG9uZSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgZW5kLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgIHZhciBfY2xvbmUgPSBlbmRbX2ldLmNsb25lTm9kZSh0cnVlKTtcblxuICAgICAgICAgIF9jbG9uZS5jbGFzc0xpc3QuYWRkKGNsYXNzZXMuY2xvbmVTbGlkZSk7XG5cbiAgICAgICAgICBpdGVtcy51bnNoaWZ0KF9jbG9uZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIEFwcGVuZCBjbG9uZWQgc2xpZGVzIHdpdGggZ2VuZXJhdGVkIHBhdHRlcm4uXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtWb2lkfVxuICAgICAqL1xuICAgIGFwcGVuZDogZnVuY3Rpb24gYXBwZW5kKCkge1xuICAgICAgdmFyIGl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICAgIHZhciBfQ29tcG9uZW50cyRIdG1sID0gQ29tcG9uZW50cy5IdG1sLFxuICAgICAgICAgIHdyYXBwZXIgPSBfQ29tcG9uZW50cyRIdG1sLndyYXBwZXIsXG4gICAgICAgICAgc2xpZGVzID0gX0NvbXBvbmVudHMkSHRtbC5zbGlkZXM7XG5cblxuICAgICAgdmFyIGhhbGYgPSBNYXRoLmZsb29yKGl0ZW1zLmxlbmd0aCAvIDIpO1xuICAgICAgdmFyIHByZXBlbmQgPSBpdGVtcy5zbGljZSgwLCBoYWxmKS5yZXZlcnNlKCk7XG4gICAgICB2YXIgYXBwZW5kID0gaXRlbXMuc2xpY2UoaGFsZiwgaXRlbXMubGVuZ3RoKTtcbiAgICAgIHZhciB3aWR0aCA9IENvbXBvbmVudHMuU2l6ZXMuc2xpZGVXaWR0aCArICdweCc7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXBwZW5kLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoYXBwZW5kW2ldKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgcHJlcGVuZC5sZW5ndGg7IF9pMisrKSB7XG4gICAgICAgIHdyYXBwZXIuaW5zZXJ0QmVmb3JlKHByZXBlbmRbX2kyXSwgc2xpZGVzWzBdKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgaXRlbXMubGVuZ3RoOyBfaTMrKykge1xuICAgICAgICBpdGVtc1tfaTNdLnN0eWxlLndpZHRoID0gd2lkdGg7XG4gICAgICB9XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFsbCBjbG9uZWQgc2xpZGVzLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXM7XG5cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBDb21wb25lbnRzLkh0bWwud3JhcHBlci5yZW1vdmVDaGlsZChpdGVtc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGRlZmluZShDbG9uZXMsICdncm93Jywge1xuICAgIC8qKlxuICAgICAqIEdldHMgYWRkaXRpb25hbCBkaW1lbnRpb25zIHZhbHVlIGNhdXNlZCBieSBjbG9uZXMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9XG4gICAgICovXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gKENvbXBvbmVudHMuU2l6ZXMuc2xpZGVXaWR0aCArIENvbXBvbmVudHMuR2Fwcy52YWx1ZSkgKiBDbG9uZXMuaXRlbXMubGVuZ3RoO1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFwcGVuZCBhZGRpdGlvbmFsIHNsaWRlJ3MgY2xvbmVzOlxuICAgKiAtIHdoaWxlIGdsaWRlJ3MgdHlwZSBpcyBgY2Fyb3VzZWxgXG4gICAqL1xuICBFdmVudHMub24oJ3VwZGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICBDbG9uZXMucmVtb3ZlKCk7XG4gICAgQ2xvbmVzLm1vdW50KCk7XG4gICAgQ2xvbmVzLmFwcGVuZCgpO1xuICB9KTtcblxuICAvKipcbiAgICogQXBwZW5kIGFkZGl0aW9uYWwgc2xpZGUncyBjbG9uZXM6XG4gICAqIC0gd2hpbGUgZ2xpZGUncyB0eXBlIGlzIGBjYXJvdXNlbGBcbiAgICovXG4gIEV2ZW50cy5vbignYnVpbGQuYmVmb3JlJywgZnVuY3Rpb24gKCkge1xuICAgIGlmIChHbGlkZS5pc1R5cGUoJ2Nhcm91c2VsJykpIHtcbiAgICAgIENsb25lcy5hcHBlbmQoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgY2xvbmVzIEhUTUxFbGVtZW50czpcbiAgICogLSBvbiBkZXN0cm95aW5nLCB0byBicmluZyBIVE1MIHRvIGl0cyBpbml0aWFsIHN0YXRlXG4gICAqL1xuICBFdmVudHMub24oJ2Rlc3Ryb3knLCBmdW5jdGlvbiAoKSB7XG4gICAgQ2xvbmVzLnJlbW92ZSgpO1xuICB9KTtcblxuICByZXR1cm4gQ2xvbmVzO1xufVxuXG52YXIgRXZlbnRzQmluZGVyID0gZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgRXZlbnRzQmluZGVyIGluc3RhbmNlLlxuICAgKi9cbiAgZnVuY3Rpb24gRXZlbnRzQmluZGVyKCkge1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIEV2ZW50c0JpbmRlcik7XG5cbiAgICB0aGlzLmxpc3RlbmVycyA9IGxpc3RlbmVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50cyBsaXN0ZW5lcnMgdG8gYXJyb3dzIEhUTUwgZWxlbWVudHMuXG4gICAqXG4gICAqIEBwYXJhbSAge1N0cmluZ3xBcnJheX0gZXZlbnRzXG4gICAqIEBwYXJhbSAge0VsZW1lbnR8V2luZG93fERvY3VtZW50fSBlbFxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2xvc3VyZVxuICAgKiBAcGFyYW0gIHtCb29sZWFufE9iamVjdH0gY2FwdHVyZVxuICAgKiBAcmV0dXJuIHtWb2lkfVxuICAgKi9cblxuXG4gIGNyZWF0ZUNsYXNzKEV2ZW50c0JpbmRlciwgW3tcbiAgICBrZXk6ICdvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uKGV2ZW50cywgZWwsIGNsb3N1cmUpIHtcbiAgICAgIHZhciBjYXB0dXJlID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBmYWxzZTtcblxuICAgICAgaWYgKGlzU3RyaW5nKGV2ZW50cykpIHtcbiAgICAgICAgZXZlbnRzID0gW2V2ZW50c107XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzW2V2ZW50c1tpXV0gPSBjbG9zdXJlO1xuXG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRzW2ldLCB0aGlzLmxpc3RlbmVyc1tldmVudHNbaV1dLCBjYXB0dXJlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGV2ZW50IGxpc3RlbmVycyBmcm9tIGFycm93cyBIVE1MIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtICB7U3RyaW5nfEFycmF5fSBldmVudHNcbiAgICAgKiBAcGFyYW0gIHtFbGVtZW50fFdpbmRvd3xEb2N1bWVudH0gZWxcbiAgICAgKiBAcGFyYW0gIHtCb29sZWFufE9iamVjdH0gY2FwdHVyZVxuICAgICAqIEByZXR1cm4ge1ZvaWR9XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ29mZicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9mZihldmVudHMsIGVsKSB7XG4gICAgICB2YXIgY2FwdHVyZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG5cbiAgICAgIGlmIChpc1N0cmluZyhldmVudHMpKSB7XG4gICAgICAgIGV2ZW50cyA9IFtldmVudHNdO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50c1tpXSwgdGhpcy5saXN0ZW5lcnNbZXZlbnRzW2ldXSwgY2FwdHVyZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzdHJveSBjb2xsZWN0ZWQgbGlzdGVuZXJzLlxuICAgICAqXG4gICAgICogQHJldHVybnMge1ZvaWR9XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2Rlc3Ryb3knLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgZGVsZXRlIHRoaXMubGlzdGVuZXJzO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gRXZlbnRzQmluZGVyO1xufSgpO1xuXG5mdW5jdGlvbiBSZXNpemUgKEdsaWRlLCBDb21wb25lbnRzLCBFdmVudHMpIHtcbiAgLyoqXG4gICAqIEluc3RhbmNlIG9mIHRoZSBiaW5kZXIgZm9yIERPTSBFdmVudHMuXG4gICAqXG4gICAqIEB0eXBlIHtFdmVudHNCaW5kZXJ9XG4gICAqL1xuICB2YXIgQmluZGVyID0gbmV3IEV2ZW50c0JpbmRlcigpO1xuXG4gIHZhciBSZXNpemUgPSB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgd2luZG93IGJpbmRpbmdzLlxuICAgICAqL1xuICAgIG1vdW50OiBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAgIHRoaXMuYmluZCgpO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIEJpbmRzIGByZXpzaXplYCBsaXN0ZW5lciB0byB0aGUgd2luZG93LlxuICAgICAqIEl0J3MgYSBjb3N0bHkgZXZlbnQsIHNvIHdlIGFyZSBkZWJvdW5jaW5nIGl0LlxuICAgICAqXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICBiaW5kOiBmdW5jdGlvbiBiaW5kKCkge1xuICAgICAgQmluZGVyLm9uKCdyZXNpemUnLCB3aW5kb3csIHRocm90dGxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgRXZlbnRzLmVtaXQoJ3Jlc2l6ZScpO1xuICAgICAgfSwgR2xpZGUuc2V0dGluZ3MudGhyb3R0bGUpKTtcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiBVbmJpbmRzIGxpc3RlbmVycyBmcm9tIHRoZSB3aW5kb3cuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtWb2lkfVxuICAgICAqL1xuICAgIHVuYmluZDogZnVuY3Rpb24gdW5iaW5kKCkge1xuICAgICAgQmluZGVyLm9mZigncmVzaXplJywgd2luZG93KTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBiaW5kaW5ncyBmcm9tIHdpbmRvdzpcbiAgICogLSBvbiBkZXN0cm95aW5nLCB0byByZW1vdmUgYWRkZWQgRXZlbnRMaXN0ZW5lclxuICAgKi9cbiAgRXZlbnRzLm9uKCdkZXN0cm95JywgZnVuY3Rpb24gKCkge1xuICAgIFJlc2l6ZS51bmJpbmQoKTtcbiAgICBCaW5kZXIuZGVzdHJveSgpO1xuICB9KTtcblxuICByZXR1cm4gUmVzaXplO1xufVxuXG52YXIgVkFMSURfRElSRUNUSU9OUyA9IFsnbHRyJywgJ3J0bCddO1xudmFyIEZMSVBFRF9NT1ZFTUVOVFMgPSB7XG4gICc+JzogJzwnLFxuICAnPCc6ICc+JyxcbiAgJz0nOiAnPSdcbn07XG5cbmZ1bmN0aW9uIERpcmVjdGlvbiAoR2xpZGUsIENvbXBvbmVudHMsIEV2ZW50cykge1xuICB2YXIgRGlyZWN0aW9uID0ge1xuICAgIC8qKlxuICAgICAqIFNldHVwcyBnYXAgdmFsdWUgYmFzZWQgb24gc2V0dGluZ3MuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtWb2lkfVxuICAgICAqL1xuICAgIG1vdW50OiBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBHbGlkZS5zZXR0aW5ncy5kaXJlY3Rpb247XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogUmVzb2x2ZXMgcGF0dGVybiBiYXNlZCBvbiBkaXJlY3Rpb24gdmFsdWVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwYXR0ZXJuXG4gICAgICogQHJldHVybnMge1N0cmluZ31cbiAgICAgKi9cbiAgICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHBhdHRlcm4pIHtcbiAgICAgIHZhciB0b2tlbiA9IHBhdHRlcm4uc2xpY2UoMCwgMSk7XG5cbiAgICAgIGlmICh0aGlzLmlzKCdydGwnKSkge1xuICAgICAgICByZXR1cm4gcGF0dGVybi5zcGxpdCh0b2tlbikuam9pbihGTElQRURfTU9WRU1FTlRTW3Rva2VuXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXR0ZXJuO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB2YWx1ZSBvZiBkaXJlY3Rpb24gbW9kZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBkaXJlY3Rpb25cbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBpczogZnVuY3Rpb24gaXMoZGlyZWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZSA9PT0gZGlyZWN0aW9uO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgZGlyZWN0aW9uIGNsYXNzIHRvIHRoZSByb290IEhUTUwgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1ZvaWR9XG4gICAgICovXG4gICAgYWRkQ2xhc3M6IGZ1bmN0aW9uIGFkZENsYXNzKCkge1xuICAgICAgQ29tcG9uZW50cy5IdG1sLnJvb3QuY2xhc3NMaXN0LmFkZChHbGlkZS5zZXR0aW5ncy5jbGFzc2VzLmRpcmVjdGlvblt0aGlzLnZhbHVlXSk7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBkaXJlY3Rpb24gY2xhc3MgZnJvbSB0aGUgcm9vdCBIVE1MIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtWb2lkfVxuICAgICAqL1xuICAgIHJlbW92ZUNsYXNzOiBmdW5jdGlvbiByZW1vdmVDbGFzcygpIHtcbiAgICAgIENvbXBvbmVudHMuSHRtbC5yb290LmNsYXNzTGlzdC5yZW1vdmUoR2xpZGUuc2V0dGluZ3MuY2xhc3Nlcy5kaXJlY3Rpb25bdGhpcy52YWx1ZV0pO1xuICAgIH1cbiAgfTtcblxuICBkZWZpbmUoRGlyZWN0aW9uLCAndmFsdWUnLCB7XG4gICAgLyoqXG4gICAgICogR2V0cyB2YWx1ZSBvZiB0aGUgZGlyZWN0aW9uLlxuICAgICAqXG4gICAgICogQHJldHVybnMge051bWJlcn1cbiAgICAgKi9cbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBEaXJlY3Rpb24uX3Y7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogU2V0cyB2YWx1ZSBvZiB0aGUgZGlyZWN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgaWYgKFZBTElEX0RJUkVDVElPTlMuaW5kZXhPZih2YWx1ZSkgPiAtMSkge1xuICAgICAgICBEaXJlY3Rpb24uX3YgPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm4oJ0RpcmVjdGlvbiB2YWx1ZSBtdXN0IGJlIGBsdHJgIG9yIGBydGxgJyk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogQ2xlYXIgZGlyZWN0aW9uIGNsYXNzOlxuICAgKiAtIG9uIGRlc3Ryb3kgdG8gYnJpbmcgSFRNTCB0byBpdHMgaW5pdGlhbCBzdGF0ZVxuICAgKiAtIG9uIHVwZGF0ZSB0byByZW1vdmUgY2xhc3MgYmVmb3JlIHJlYXBwbGluZyBiZWxsb3dcbiAgICovXG4gIEV2ZW50cy5vbihbJ2Rlc3Ryb3knLCAndXBkYXRlJ10sIGZ1bmN0aW9uICgpIHtcbiAgICBEaXJlY3Rpb24ucmVtb3ZlQ2xhc3MoKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFJlbW91bnQgY29tcG9uZW50OlxuICAgKiAtIG9uIHVwZGF0ZSB0byByZWZsZWN0IGNoYW5nZXMgaW4gZGlyZWN0aW9uIHZhbHVlXG4gICAqL1xuICBFdmVudHMub24oJ3VwZGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICBEaXJlY3Rpb24ubW91bnQoKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFwcGx5IGRpcmVjdGlvbiBjbGFzczpcbiAgICogLSBiZWZvcmUgYnVpbGRpbmcgdG8gYXBwbHkgY2xhc3MgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAqIC0gb24gdXBkYXRpbmcgdG8gcmVhcHBseSBkaXJlY3Rpb24gY2xhc3MgdGhhdCBtYXkgY2hhbmdlZFxuICAgKi9cbiAgRXZlbnRzLm9uKFsnYnVpbGQuYmVmb3JlJywgJ3VwZGF0ZSddLCBmdW5jdGlvbiAoKSB7XG4gICAgRGlyZWN0aW9uLmFkZENsYXNzKCk7XG4gIH0pO1xuXG4gIHJldHVybiBEaXJlY3Rpb247XG59XG5cbi8qKlxuICogUmVmbGVjdHMgdmFsdWUgb2YgZ2xpZGUgbW92ZW1lbnQuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBHbGlkZVxuICogQHBhcmFtICB7T2JqZWN0fSBDb21wb25lbnRzXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIFJ0bCAoR2xpZGUsIENvbXBvbmVudHMpIHtcbiAgcmV0dXJuIHtcbiAgICAvKipcbiAgICAgKiBOZWdhdGVzIHRoZSBwYXNzZWQgdHJhbnNsYXRlIGlmIGdsaWRlIGlzIGluIFJUTCBvcHRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtOdW1iZXJ9IHRyYW5zbGF0ZVxuICAgICAqIEByZXR1cm4ge051bWJlcn1cbiAgICAgKi9cbiAgICBtb2RpZnk6IGZ1bmN0aW9uIG1vZGlmeSh0cmFuc2xhdGUpIHtcbiAgICAgIGlmIChDb21wb25lbnRzLkRpcmVjdGlvbi5pcygncnRsJykpIHtcbiAgICAgICAgcmV0dXJuIC10cmFuc2xhdGU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cmFuc2xhdGU7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgZ2xpZGUgbW92ZW1lbnQgd2l0aCBhIGBnYXBgIHNldHRpbmdzLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gR2xpZGVcbiAqIEBwYXJhbSAge09iamVjdH0gQ29tcG9uZW50c1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBHYXAgKEdsaWRlLCBDb21wb25lbnRzKSB7XG4gIHJldHVybiB7XG4gICAgLyoqXG4gICAgICogTW9kaWZpZXMgcGFzc2VkIHRyYW5zbGF0ZSB2YWx1ZSB3aXRoIG51bWJlciBpbiB0aGUgYGdhcGAgc2V0dGluZ3MuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtOdW1iZXJ9IHRyYW5zbGF0ZVxuICAgICAqIEByZXR1cm4ge051bWJlcn1cbiAgICAgKi9cbiAgICBtb2RpZnk6IGZ1bmN0aW9uIG1vZGlmeSh0cmFuc2xhdGUpIHtcbiAgICAgIHJldHVybiB0cmFuc2xhdGUgKyBDb21wb25lbnRzLkdhcHMudmFsdWUgKiBHbGlkZS5pbmRleDtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlcyBnbGlkZSBtb3ZlbWVudCB3aXRoIHdpZHRoIG9mIGFkZGl0aW9uYWwgY2xvbmVzIHdpZHRoLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gR2xpZGVcbiAqIEBwYXJhbSAge09iamVjdH0gQ29tcG9uZW50c1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBHcm93IChHbGlkZSwgQ29tcG9uZW50cykge1xuICByZXR1cm4ge1xuICAgIC8qKlxuICAgICAqIEFkZHMgdG8gdGhlIHBhc3NlZCB0cmFuc2xhdGUgd2lkdGggb2YgdGhlIGhhbGYgb2YgY2xvbmVzLlxuICAgICAqXG4gICAgICogQHBhcmFtICB7TnVtYmVyfSB0cmFuc2xhdGVcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9XG4gICAgICovXG4gICAgbW9kaWZ5OiBmdW5jdGlvbiBtb2RpZnkodHJhbnNsYXRlKSB7XG4gICAgICByZXR1cm4gdHJhbnNsYXRlICsgQ29tcG9uZW50cy5DbG9uZXMuZ3JvdyAvIDI7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgZ2xpZGUgbW92ZW1lbnQgd2l0aCBhIGBwZWVrYCBzZXR0aW5ncy5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IEdsaWRlXG4gKiBAcGFyYW0gIHtPYmplY3R9IENvbXBvbmVudHNcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gUGVla2luZyAoR2xpZGUsIENvbXBvbmVudHMpIHtcbiAgcmV0dXJuIHtcbiAgICAvKipcbiAgICAgKiBNb2RpZmllcyBwYXNzZWQgdHJhbnNsYXRlIHZhbHVlIHdpdGggYSBgcGVla2Agc2V0dGluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAge051bWJlcn0gdHJhbnNsYXRlXG4gICAgICogQHJldHVybiB7TnVtYmVyfVxuICAgICAqL1xuICAgIG1vZGlmeTogZnVuY3Rpb24gbW9kaWZ5KHRyYW5zbGF0ZSkge1xuICAgICAgaWYgKEdsaWRlLnNldHRpbmdzLmZvY3VzQXQgPj0gMCkge1xuICAgICAgICB2YXIgcGVlayA9IENvbXBvbmVudHMuUGVlay52YWx1ZTtcblxuICAgICAgICBpZiAoaXNPYmplY3QocGVlaykpIHtcbiAgICAgICAgICByZXR1cm4gdHJhbnNsYXRlIC0gcGVlay5iZWZvcmU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJhbnNsYXRlIC0gcGVlaztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRyYW5zbGF0ZTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlcyBnbGlkZSBtb3ZlbWVudCB3aXRoIGEgYGZvY3VzQXRgIHNldHRpbmdzLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gR2xpZGVcbiAqIEBwYXJhbSAge09iamVjdH0gQ29tcG9uZW50c1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBGb2N1c2luZyAoR2xpZGUsIENvbXBvbmVudHMpIHtcbiAgcmV0dXJuIHtcbiAgICAvKipcbiAgICAgKiBNb2RpZmllcyBwYXNzZWQgdHJhbnNsYXRlIHZhbHVlIHdpdGggaW5kZXggaW4gdGhlIGBmb2N1c0F0YCBzZXR0aW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtICB7TnVtYmVyfSB0cmFuc2xhdGVcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9XG4gICAgICovXG4gICAgbW9kaWZ5OiBmdW5jdGlvbiBtb2RpZnkodHJhbnNsYXRlKSB7XG4gICAgICB2YXIgZ2FwID0gQ29tcG9uZW50cy5HYXBzLnZhbHVlO1xuICAgICAgdmFyIHdpZHRoID0gQ29tcG9uZW50cy5TaXplcy53aWR0aDtcbiAgICAgIHZhciBmb2N1c0F0ID0gR2xpZGUuc2V0dGluZ3MuZm9jdXNBdDtcbiAgICAgIHZhciBzbGlkZVdpZHRoID0gQ29tcG9uZW50cy5TaXplcy5zbGlkZVdpZHRoO1xuXG4gICAgICBpZiAoZm9jdXNBdCA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZSAtICh3aWR0aCAvIDIgLSBzbGlkZVdpZHRoIC8gMik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cmFuc2xhdGUgLSBzbGlkZVdpZHRoICogZm9jdXNBdCAtIGdhcCAqIGZvY3VzQXQ7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIEFwcGxpZXMgZGlmZnJlbnQgdHJhbnNmb3JtZXJzIG9uIHRyYW5zbGF0ZSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IEdsaWRlXG4gKiBAcGFyYW0gIHtPYmplY3R9IENvbXBvbmVudHNcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gbXV0YXRvciAoR2xpZGUsIENvbXBvbmVudHMsIEV2ZW50cykge1xuICAvKipcbiAgICogTWVyZ2UgaW5zdGFuY2UgdHJhbnNmb3JtZXJzIHdpdGggY29sbGVjdGlvbiBvZiBkZWZhdWx0IHRyYW5zZm9ybWVycy5cbiAgICogSXQncyBpbXBvcnRhbnQgdGhhdCB0aGUgUnRsIGNvbXBvbmVudCBiZSBsYXN0IG9uIHRoZSBsaXN0LFxuICAgKiBzbyBpdCByZWZsZWN0cyBhbGwgcHJldmlvdXMgdHJhbnNmb3JtYXRpb25zLlxuICAgKlxuICAgKiBAdHlwZSB7QXJyYXl9XG4gICAqL1xuICB2YXIgVFJBTlNGT1JNRVJTID0gW0dhcCwgR3JvdywgUGVla2luZywgRm9jdXNpbmddLmNvbmNhdChHbGlkZS5fdCwgW1J0bF0pO1xuXG4gIHJldHVybiB7XG4gICAgLyoqXG4gICAgICogUGlwbGluZXMgdHJhbnNsYXRlIHZhbHVlIHdpdGggcmVnaXN0ZXJlZCB0cmFuc2Zvcm1lcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtOdW1iZXJ9IHRyYW5zbGF0ZVxuICAgICAqIEByZXR1cm4ge051bWJlcn1cbiAgICAgKi9cbiAgICBtdXRhdGU6IGZ1bmN0aW9uIG11dGF0ZSh0cmFuc2xhdGUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgVFJBTlNGT1JNRVJTLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB0cmFuc2Zvcm1lciA9IFRSQU5TRk9STUVSU1tpXTtcblxuICAgICAgICBpZiAoaXNGdW5jdGlvbih0cmFuc2Zvcm1lcikgJiYgaXNGdW5jdGlvbih0cmFuc2Zvcm1lcigpLm1vZGlmeSkpIHtcbiAgICAgICAgICB0cmFuc2xhdGUgPSB0cmFuc2Zvcm1lcihHbGlkZSwgQ29tcG9uZW50cywgRXZlbnRzKS5tb2RpZnkodHJhbnNsYXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3YXJuKCdUcmFuc2Zvcm1lciBzaG91bGQgYmUgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gb2JqZWN0IHdpdGggYG1vZGlmeSgpYCBtZXRob2QnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJhbnNsYXRlO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gVHJhbnNsYXRlIChHbGlkZSwgQ29tcG9uZW50cywgRXZlbnRzKSB7XG4gIHZhciBUcmFuc2xhdGUgPSB7XG4gICAgLyoqXG4gICAgICogU2V0cyB2YWx1ZSBvZiB0cmFuc2xhdGUgb24gSFRNTCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHZhbHVlXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgdmFyIHRyYW5zZm9ybSA9IG11dGF0b3IoR2xpZGUsIENvbXBvbmVudHMpLm11dGF0ZSh2YWx1ZSk7XG5cbiAgICAgIENvbXBvbmVudHMuSHRtbC53cmFwcGVyLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGUzZCgnICsgLTEgKiB0cmFuc2Zvcm0gKyAncHgsIDBweCwgMHB4KSc7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB2YWx1ZSBvZiB0cmFuc2xhdGUgZnJvbSBIVE1MIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtWb2lkfVxuICAgICAqL1xuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgQ29tcG9uZW50cy5IdG1sLndyYXBwZXIuc3R5bGUudHJhbnNmb3JtID0gJyc7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgbmV3IHRyYW5zbGF0ZSB2YWx1ZTpcbiAgICogLSBvbiBtb3ZlIHRvIHJlZmxlY3QgaW5kZXggY2hhbmdlXG4gICAqIC0gb24gdXBkYXRpbmcgdmlhIEFQSSB0byByZWZsZWN0IHBvc3NpYmxlIGNoYW5nZXMgaW4gb3B0aW9uc1xuICAgKi9cbiAgRXZlbnRzLm9uKCdtb3ZlJywgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICB2YXIgZ2FwID0gQ29tcG9uZW50cy5HYXBzLnZhbHVlO1xuICAgIHZhciBsZW5ndGggPSBDb21wb25lbnRzLlNpemVzLmxlbmd0aDtcbiAgICB2YXIgd2lkdGggPSBDb21wb25lbnRzLlNpemVzLnNsaWRlV2lkdGg7XG5cbiAgICBpZiAoR2xpZGUuaXNUeXBlKCdjYXJvdXNlbCcpICYmIENvbXBvbmVudHMuUnVuLmlzT2Zmc2V0KCc8JykpIHtcbiAgICAgIENvbXBvbmVudHMuVHJhbnNpdGlvbi5hZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgIEV2ZW50cy5lbWl0KCd0cmFuc2xhdGUuanVtcCcpO1xuXG4gICAgICAgIFRyYW5zbGF0ZS5zZXQod2lkdGggKiAobGVuZ3RoIC0gMSkpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBUcmFuc2xhdGUuc2V0KC13aWR0aCAtIGdhcCAqIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgaWYgKEdsaWRlLmlzVHlwZSgnY2Fyb3VzZWwnKSAmJiBDb21wb25lbnRzLlJ1bi5pc09mZnNldCgnPicpKSB7XG4gICAgICBDb21wb25lbnRzLlRyYW5zaXRpb24uYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICBFdmVudHMuZW1pdCgndHJhbnNsYXRlLmp1bXAnKTtcblxuICAgICAgICBUcmFuc2xhdGUuc2V0KDApO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBUcmFuc2xhdGUuc2V0KHdpZHRoICogbGVuZ3RoICsgZ2FwICogbGVuZ3RoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVHJhbnNsYXRlLnNldChjb250ZXh0Lm1vdmVtZW50KTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0cmFuc2xhdGU6XG4gICAqIC0gb24gZGVzdHJveWluZyB0byBicmluZyBtYXJrdXAgdG8gaXRzIGluaXRhbCBzdGF0ZVxuICAgKi9cbiAgRXZlbnRzLm9uKCdkZXN0cm95JywgZnVuY3Rpb24gKCkge1xuICAgIFRyYW5zbGF0ZS5yZW1vdmUoKTtcbiAgfSk7XG5cbiAgcmV0dXJuIFRyYW5zbGF0ZTtcbn1cblxuZnVuY3Rpb24gVHJhbnNpdGlvbiAoR2xpZGUsIENvbXBvbmVudHMsIEV2ZW50cykge1xuICAvKipcbiAgICogSG9sZHMgaW5hY3Rpdml0eSBzdGF0dXMgb2YgdHJhbnNpdGlvbi5cbiAgICogV2hlbiB0cnVlIHRyYW5zaXRpb24gaXMgbm90IGFwcGxpZWQuXG4gICAqXG4gICAqIEB0eXBlIHtCb29sZWFufVxuICAgKi9cbiAgdmFyIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgdmFyIFRyYW5zaXRpb24gPSB7XG4gICAgLyoqXG4gICAgICogQ29tcG9zZXMgc3RyaW5nIG9mIHRoZSBDU1MgdHJhbnNpdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICAgICAqIEByZXR1cm4ge1N0cmluZ31cbiAgICAgKi9cbiAgICBjb21wb3NlOiBmdW5jdGlvbiBjb21wb3NlKHByb3BlcnR5KSB7XG4gICAgICB2YXIgc2V0dGluZ3MgPSBHbGlkZS5zZXR0aW5ncztcblxuICAgICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICByZXR1cm4gcHJvcGVydHkgKyAnICcgKyB0aGlzLmR1cmF0aW9uICsgJ21zICcgKyBzZXR0aW5ncy5hbmltYXRpb25UaW1pbmdGdW5jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvcGVydHkgKyAnIDBtcyAnICsgc2V0dGluZ3MuYW5pbWF0aW9uVGltaW5nRnVuYztcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHZhbHVlIG9mIHRyYW5zaXRpb24gb24gSFRNTCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBwcm9wZXJ0eVxuICAgICAqIEByZXR1cm4ge1ZvaWR9XG4gICAgICovXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQoKSB7XG4gICAgICB2YXIgcHJvcGVydHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICd0cmFuc2Zvcm0nO1xuXG4gICAgICBDb21wb25lbnRzLkh0bWwud3JhcHBlci5zdHlsZS50cmFuc2l0aW9uID0gdGhpcy5jb21wb3NlKHByb3BlcnR5KTtcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHZhbHVlIG9mIHRyYW5zaXRpb24gZnJvbSBIVE1MIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtWb2lkfVxuICAgICAqL1xuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgQ29tcG9uZW50cy5IdG1sLndyYXBwZXIuc3R5bGUudHJhbnNpdGlvbiA9ICcnO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgY2FsbGJhY2sgYWZ0ZXIgYW5pbWF0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICBhZnRlcjogZnVuY3Rpb24gYWZ0ZXIoY2FsbGJhY2spIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfSwgdGhpcy5kdXJhdGlvbik7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlIHRyYW5zaXRpb24uXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtWb2lkfVxuICAgICAqL1xuICAgIGVuYWJsZTogZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgICAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgICAgdGhpcy5zZXQoKTtcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlIHRyYW5zaXRpb24uXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtWb2lkfVxuICAgICAqL1xuICAgIGRpc2FibGU6IGZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgICBkaXNhYmxlZCA9IHRydWU7XG5cbiAgICAgIHRoaXMuc2V0KCk7XG4gICAgfVxuICB9O1xuXG4gIGRlZmluZShUcmFuc2l0aW9uLCAnZHVyYXRpb24nLCB7XG4gICAgLyoqXG4gICAgICogR2V0cyBkdXJhdGlvbiBvZiB0aGUgdHJhbnNpdGlvbiBiYXNlZFxuICAgICAqIG9uIGN1cnJlbnRseSBydW5uaW5nIGFuaW1hdGlvbiB0eXBlLlxuICAgICAqXG4gICAgICogQHJldHVybiB7TnVtYmVyfVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIHNldHRpbmdzID0gR2xpZGUuc2V0dGluZ3M7XG5cbiAgICAgIGlmIChHbGlkZS5pc1R5cGUoJ3NsaWRlcicpICYmIENvbXBvbmVudHMuUnVuLm9mZnNldCkge1xuICAgICAgICByZXR1cm4gc2V0dGluZ3MucmV3aW5kRHVyYXRpb247XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZXR0aW5ncy5hbmltYXRpb25EdXJhdGlvbjtcbiAgICB9XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBTZXQgdHJhbnNpdGlvbiBgc3R5bGVgIHZhbHVlOlxuICAgKiAtIG9uIGVhY2ggbW92aW5nLCBiZWNhdXNlIGl0IG1heSBiZSBjbGVhcmVkIGJ5IG9mZnNldCBtb3ZlXG4gICAqL1xuICBFdmVudHMub24oJ21vdmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgVHJhbnNpdGlvbi5zZXQoKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIERpc2FibGUgdHJhbnNpdGlvbjpcbiAgICogLSBiZWZvcmUgaW5pdGlhbCBidWlsZCB0byBhdm9pZCB0cmFuc2l0aW9uaW5nIGZyb20gYDBgIHRvIGBzdGFydEF0YCBpbmRleFxuICAgKiAtIHdoaWxlIHJlc2l6aW5nIHdpbmRvdyBhbmQgcmVjYWxjdWxhdGluZyBkaW1lbnRpb25zXG4gICAqIC0gb24ganVtcGluZyBmcm9tIG9mZnNldCB0cmFuc2l0aW9uIGF0IHN0YXJ0IGFuZCBlbmQgZWRnZXMgaW4gYGNhcm91c2VsYCB0eXBlXG4gICAqL1xuICBFdmVudHMub24oWydidWlsZC5iZWZvcmUnLCAncmVzaXplJywgJ3RyYW5zbGF0ZS5qdW1wJ10sIGZ1bmN0aW9uICgpIHtcbiAgICBUcmFuc2l0aW9uLmRpc2FibGUoKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB0cmFuc2l0aW9uOlxuICAgKiAtIG9uIGVhY2ggcnVubmluZywgYmVjYXVzZSBpdCBtYXkgYmUgZGlzYWJsZWQgYnkgb2Zmc2V0IG1vdmVcbiAgICovXG4gIEV2ZW50cy5vbigncnVuJywgZnVuY3Rpb24gKCkge1xuICAgIFRyYW5zaXRpb24uZW5hYmxlKCk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgdHJhbnNpdGlvbjpcbiAgICogLSBvbiBkZXN0cm95aW5nIHRvIGJyaW5nIG1hcmt1cCB0byBpdHMgaW5pdGFsIHN0YXRlXG4gICAqL1xuICBFdmVudHMub24oJ2Rlc3Ryb3knLCBmdW5jdGlvbiAoKSB7XG4gICAgVHJhbnNpdGlvbi5yZW1vdmUoKTtcbiAgfSk7XG5cbiAgcmV0dXJuIFRyYW5zaXRpb247XG59XG5cbi8qKlxuICogVGVzdCB2aWEgYSBnZXR0ZXIgaW4gdGhlIG9wdGlvbnMgb2JqZWN0IHRvIHNlZVxuICogaWYgdGhlIHBhc3NpdmUgcHJvcGVydHkgaXMgYWNjZXNzZWQuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vV0lDRy9FdmVudExpc3RlbmVyT3B0aW9ucy9ibG9iL2doLXBhZ2VzL2V4cGxhaW5lci5tZCNmZWF0dXJlLWRldGVjdGlvblxuICovXG5cbnZhciBzdXBwb3J0c1Bhc3NpdmUgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIG9wdHMgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdwYXNzaXZlJywge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgc3VwcG9ydHNQYXNzaXZlID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0UGFzc2l2ZScsIG51bGwsIG9wdHMpO1xuICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGVzdFBhc3NpdmUnLCBudWxsLCBvcHRzKTtcbn0gY2F0Y2ggKGUpIHt9XG5cbnZhciBzdXBwb3J0c1Bhc3NpdmUkMSA9IHN1cHBvcnRzUGFzc2l2ZTtcblxudmFyIFNUQVJUX0VWRU5UUyA9IFsndG91Y2hzdGFydCcsICdtb3VzZWRvd24nXTtcbnZhciBNT1ZFX0VWRU5UUyA9IFsndG91Y2htb3ZlJywgJ21vdXNlbW92ZSddO1xudmFyIEVORF9FVkVOVFMgPSBbJ3RvdWNoZW5kJywgJ3RvdWNoY2FuY2VsJywgJ21vdXNldXAnLCAnbW91c2VsZWF2ZSddO1xudmFyIE1PVVNFX0VWRU5UUyA9IFsnbW91c2Vkb3duJywgJ21vdXNlbW92ZScsICdtb3VzZXVwJywgJ21vdXNlbGVhdmUnXTtcblxuZnVuY3Rpb24gc3dpcGUgKEdsaWRlLCBDb21wb25lbnRzLCBFdmVudHMpIHtcbiAgLyoqXG4gICAqIEluc3RhbmNlIG9mIHRoZSBiaW5kZXIgZm9yIERPTSBFdmVudHMuXG4gICAqXG4gICAqIEB0eXBlIHtFdmVudHNCaW5kZXJ9XG4gICAqL1xuICB2YXIgQmluZGVyID0gbmV3IEV2ZW50c0JpbmRlcigpO1xuXG4gIHZhciBzd2lwZVNpbiA9IDA7XG4gIHZhciBzd2lwZVN0YXJ0WCA9IDA7XG4gIHZhciBzd2lwZVN0YXJ0WSA9IDA7XG4gIHZhciBkaXNhYmxlZCA9IGZhbHNlO1xuICB2YXIgY2FwdHVyZSA9IHN1cHBvcnRzUGFzc2l2ZSQxID8geyBwYXNzaXZlOiB0cnVlIH0gOiBmYWxzZTtcblxuICB2YXIgU3dpcGUgPSB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgc3dpcGUgYmluZGluZ3MuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtWb2lkfVxuICAgICAqL1xuICAgIG1vdW50OiBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAgIHRoaXMuYmluZFN3aXBlU3RhcnQoKTtcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVyIGZvciBgc3dpcGVzdGFydGAgZXZlbnQuIENhbGN1bGF0ZXMgZW50cnkgcG9pbnRzIG9mIHRoZSB1c2VyJ3MgdGFwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICBzdGFydDogZnVuY3Rpb24gc3RhcnQoZXZlbnQpIHtcbiAgICAgIGlmICghZGlzYWJsZWQgJiYgIUdsaWRlLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZSgpO1xuXG4gICAgICAgIHZhciBzd2lwZSA9IHRoaXMudG91Y2hlcyhldmVudCk7XG5cbiAgICAgICAgc3dpcGVTaW4gPSBudWxsO1xuICAgICAgICBzd2lwZVN0YXJ0WCA9IHRvSW50KHN3aXBlLnBhZ2VYKTtcbiAgICAgICAgc3dpcGVTdGFydFkgPSB0b0ludChzd2lwZS5wYWdlWSk7XG5cbiAgICAgICAgdGhpcy5iaW5kU3dpcGVNb3ZlKCk7XG4gICAgICAgIHRoaXMuYmluZFN3aXBlRW5kKCk7XG5cbiAgICAgICAgRXZlbnRzLmVtaXQoJ3N3aXBlLnN0YXJ0Jyk7XG4gICAgICB9XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlciBmb3IgYHN3aXBlbW92ZWAgZXZlbnQuIENhbGN1bGF0ZXMgdXNlcidzIHRhcCBhbmdsZSBhbmQgZGlzdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcbiAgICAgKi9cbiAgICBtb3ZlOiBmdW5jdGlvbiBtb3ZlKGV2ZW50KSB7XG4gICAgICBpZiAoIUdsaWRlLmRpc2FibGVkKSB7XG4gICAgICAgIHZhciBfR2xpZGUkc2V0dGluZ3MgPSBHbGlkZS5zZXR0aW5ncyxcbiAgICAgICAgICAgIHRvdWNoQW5nbGUgPSBfR2xpZGUkc2V0dGluZ3MudG91Y2hBbmdsZSxcbiAgICAgICAgICAgIHRvdWNoUmF0aW8gPSBfR2xpZGUkc2V0dGluZ3MudG91Y2hSYXRpbyxcbiAgICAgICAgICAgIGNsYXNzZXMgPSBfR2xpZGUkc2V0dGluZ3MuY2xhc3NlcztcblxuXG4gICAgICAgIHZhciBzd2lwZSA9IHRoaXMudG91Y2hlcyhldmVudCk7XG5cbiAgICAgICAgdmFyIHN1YkV4U3ggPSB0b0ludChzd2lwZS5wYWdlWCkgLSBzd2lwZVN0YXJ0WDtcbiAgICAgICAgdmFyIHN1YkV5U3kgPSB0b0ludChzd2lwZS5wYWdlWSkgLSBzd2lwZVN0YXJ0WTtcbiAgICAgICAgdmFyIHBvd0VYID0gTWF0aC5hYnMoc3ViRXhTeCA8PCAyKTtcbiAgICAgICAgdmFyIHBvd0VZID0gTWF0aC5hYnMoc3ViRXlTeSA8PCAyKTtcbiAgICAgICAgdmFyIHN3aXBlSHlwb3RlbnVzZSA9IE1hdGguc3FydChwb3dFWCArIHBvd0VZKTtcbiAgICAgICAgdmFyIHN3aXBlQ2F0aGV0dXMgPSBNYXRoLnNxcnQocG93RVkpO1xuXG4gICAgICAgIHN3aXBlU2luID0gTWF0aC5hc2luKHN3aXBlQ2F0aGV0dXMgLyBzd2lwZUh5cG90ZW51c2UpO1xuXG4gICAgICAgIGlmIChzd2lwZVNpbiAqIDE4MCAvIE1hdGguUEkgPCB0b3VjaEFuZ2xlKSB7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICBDb21wb25lbnRzLk1vdmUubWFrZShzdWJFeFN4ICogdG9GbG9hdCh0b3VjaFJhdGlvKSk7XG5cbiAgICAgICAgICBDb21wb25lbnRzLkh0bWwucm9vdC5jbGFzc0xpc3QuYWRkKGNsYXNzZXMuZHJhZ2dpbmcpO1xuXG4gICAgICAgICAgRXZlbnRzLmVtaXQoJ3N3aXBlLm1vdmUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVyIGZvciBgc3dpcGVlbmRgIGV2ZW50LiBGaW5pdGlhbGl6ZXMgdXNlcidzIHRhcCBhbmQgZGVjaWRlcyBhYm91dCBnbGlkZSBtb3ZlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICBlbmQ6IGZ1bmN0aW9uIGVuZChldmVudCkge1xuICAgICAgaWYgKCFHbGlkZS5kaXNhYmxlZCkge1xuICAgICAgICB2YXIgc2V0dGluZ3MgPSBHbGlkZS5zZXR0aW5ncztcblxuICAgICAgICB2YXIgc3dpcGUgPSB0aGlzLnRvdWNoZXMoZXZlbnQpO1xuICAgICAgICB2YXIgdGhyZXNob2xkID0gdGhpcy50aHJlc2hvbGQoZXZlbnQpO1xuXG4gICAgICAgIHZhciBzd2lwZURpc3RhbmNlID0gc3dpcGUucGFnZVggLSBzd2lwZVN0YXJ0WDtcbiAgICAgICAgdmFyIHN3aXBlRGVnID0gc3dpcGVTaW4gKiAxODAgLyBNYXRoLlBJO1xuICAgICAgICB2YXIgc3RlcHMgPSBNYXRoLnJvdW5kKHN3aXBlRGlzdGFuY2UgLyBDb21wb25lbnRzLlNpemVzLnNsaWRlV2lkdGgpO1xuXG4gICAgICAgIHRoaXMuZW5hYmxlKCk7XG5cbiAgICAgICAgaWYgKHN3aXBlRGlzdGFuY2UgPiB0aHJlc2hvbGQgJiYgc3dpcGVEZWcgPCBzZXR0aW5ncy50b3VjaEFuZ2xlKSB7XG4gICAgICAgICAgLy8gV2hpbGUgc3dpcGUgaXMgcG9zaXRpdmUgYW5kIGdyZWF0ZXIgdGhhbiB0aHJlc2hvbGQgbW92ZSBiYWNrd2FyZC5cbiAgICAgICAgICBpZiAoc2V0dGluZ3MucGVyVG91Y2gpIHtcbiAgICAgICAgICAgIHN0ZXBzID0gTWF0aC5taW4oc3RlcHMsIHRvSW50KHNldHRpbmdzLnBlclRvdWNoKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKENvbXBvbmVudHMuRGlyZWN0aW9uLmlzKCdydGwnKSkge1xuICAgICAgICAgICAgc3RlcHMgPSAtc3RlcHM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQ29tcG9uZW50cy5SdW4ubWFrZShDb21wb25lbnRzLkRpcmVjdGlvbi5yZXNvbHZlKCc8JyArIHN0ZXBzKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3dpcGVEaXN0YW5jZSA8IC10aHJlc2hvbGQgJiYgc3dpcGVEZWcgPCBzZXR0aW5ncy50b3VjaEFuZ2xlKSB7XG4gICAgICAgICAgLy8gV2hpbGUgc3dpcGUgaXMgbmVnYXRpdmUgYW5kIGxvd2VyIHRoYW4gbmVnYXRpdmUgdGhyZXNob2xkIG1vdmUgZm9yd2FyZC5cbiAgICAgICAgICBpZiAoc2V0dGluZ3MucGVyVG91Y2gpIHtcbiAgICAgICAgICAgIHN0ZXBzID0gTWF0aC5tYXgoc3RlcHMsIC10b0ludChzZXR0aW5ncy5wZXJUb3VjaCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChDb21wb25lbnRzLkRpcmVjdGlvbi5pcygncnRsJykpIHtcbiAgICAgICAgICAgIHN0ZXBzID0gLXN0ZXBzO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIENvbXBvbmVudHMuUnVuLm1ha2UoQ29tcG9uZW50cy5EaXJlY3Rpb24ucmVzb2x2ZSgnPicgKyBzdGVwcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFdoaWxlIHN3aXBlIGRvbid0IHJlYWNoIGRpc3RhbmNlIGFwcGx5IHByZXZpb3VzIHRyYW5zZm9ybS5cbiAgICAgICAgICBDb21wb25lbnRzLk1vdmUubWFrZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgQ29tcG9uZW50cy5IdG1sLnJvb3QuY2xhc3NMaXN0LnJlbW92ZShzZXR0aW5ncy5jbGFzc2VzLmRyYWdnaW5nKTtcblxuICAgICAgICB0aGlzLnVuYmluZFN3aXBlTW92ZSgpO1xuICAgICAgICB0aGlzLnVuYmluZFN3aXBlRW5kKCk7XG5cbiAgICAgICAgRXZlbnRzLmVtaXQoJ3N3aXBlLmVuZCcpO1xuICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIEJpbmRzIHN3aXBlJ3Mgc3RhcnRpbmcgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtWb2lkfVxuICAgICAqL1xuICAgIGJpbmRTd2lwZVN0YXJ0OiBmdW5jdGlvbiBiaW5kU3dpcGVTdGFydCgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBzZXR0aW5ncyA9IEdsaWRlLnNldHRpbmdzO1xuXG4gICAgICBpZiAoc2V0dGluZ3Muc3dpcGVUaHJlc2hvbGQpIHtcbiAgICAgICAgQmluZGVyLm9uKFNUQVJUX0VWRU5UU1swXSwgQ29tcG9uZW50cy5IdG1sLndyYXBwZXIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIF90aGlzLnN0YXJ0KGV2ZW50KTtcbiAgICAgICAgfSwgY2FwdHVyZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZXR0aW5ncy5kcmFnVGhyZXNob2xkKSB7XG4gICAgICAgIEJpbmRlci5vbihTVEFSVF9FVkVOVFNbMV0sIENvbXBvbmVudHMuSHRtbC53cmFwcGVyLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBfdGhpcy5zdGFydChldmVudCk7XG4gICAgICAgIH0sIGNhcHR1cmUpO1xuICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIFVuYmluZHMgc3dpcGUncyBzdGFydGluZyBldmVudC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1ZvaWR9XG4gICAgICovXG4gICAgdW5iaW5kU3dpcGVTdGFydDogZnVuY3Rpb24gdW5iaW5kU3dpcGVTdGFydCgpIHtcbiAgICAgIEJpbmRlci5vZmYoU1RBUlRfRVZFTlRTWzBdLCBDb21wb25lbnRzLkh0bWwud3JhcHBlciwgY2FwdHVyZSk7XG4gICAgICBCaW5kZXIub2ZmKFNUQVJUX0VWRU5UU1sxXSwgQ29tcG9uZW50cy5IdG1sLndyYXBwZXIsIGNhcHR1cmUpO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIEJpbmRzIHN3aXBlJ3MgbW92aW5nIGV2ZW50LlxuICAgICAqXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICBiaW5kU3dpcGVNb3ZlOiBmdW5jdGlvbiBiaW5kU3dpcGVNb3ZlKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIEJpbmRlci5vbihNT1ZFX0VWRU5UUywgQ29tcG9uZW50cy5IdG1sLndyYXBwZXIsIHRocm90dGxlKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBfdGhpczIubW92ZShldmVudCk7XG4gICAgICB9LCBHbGlkZS5zZXR0aW5ncy50aHJvdHRsZSksIGNhcHR1cmUpO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIFVuYmluZHMgc3dpcGUncyBtb3ZpbmcgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtWb2lkfVxuICAgICAqL1xuICAgIHVuYmluZFN3aXBlTW92ZTogZnVuY3Rpb24gdW5iaW5kU3dpcGVNb3ZlKCkge1xuICAgICAgQmluZGVyLm9mZihNT1ZFX0VWRU5UUywgQ29tcG9uZW50cy5IdG1sLndyYXBwZXIsIGNhcHR1cmUpO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIEJpbmRzIHN3aXBlJ3MgZW5kaW5nIGV2ZW50LlxuICAgICAqXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICBiaW5kU3dpcGVFbmQ6IGZ1bmN0aW9uIGJpbmRTd2lwZUVuZCgpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICBCaW5kZXIub24oRU5EX0VWRU5UUywgQ29tcG9uZW50cy5IdG1sLndyYXBwZXIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBfdGhpczMuZW5kKGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIFVuYmluZHMgc3dpcGUncyBlbmRpbmcgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtWb2lkfVxuICAgICAqL1xuICAgIHVuYmluZFN3aXBlRW5kOiBmdW5jdGlvbiB1bmJpbmRTd2lwZUVuZCgpIHtcbiAgICAgIEJpbmRlci5vZmYoRU5EX0VWRU5UUywgQ29tcG9uZW50cy5IdG1sLndyYXBwZXIpO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIE5vcm1hbGl6ZXMgZXZlbnQgdG91Y2hlcyBwb2ludHMgYWNjb3J0aW5nIHRvIGRpZmZlcmVudCB0eXBlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxuICAgICAqL1xuICAgIHRvdWNoZXM6IGZ1bmN0aW9uIHRvdWNoZXMoZXZlbnQpIHtcbiAgICAgIGlmIChNT1VTRV9FVkVOVFMuaW5kZXhPZihldmVudC50eXBlKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGV2ZW50LnRvdWNoZXNbMF0gfHwgZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogR2V0cyB2YWx1ZSBvZiBtaW5pbXVtIHN3aXBlIGRpc3RhbmNlIHNldHRpbmdzIGJhc2VkIG9uIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhyZXNob2xkOiBmdW5jdGlvbiB0aHJlc2hvbGQoZXZlbnQpIHtcbiAgICAgIHZhciBzZXR0aW5ncyA9IEdsaWRlLnNldHRpbmdzO1xuXG4gICAgICBpZiAoTU9VU0VfRVZFTlRTLmluZGV4T2YoZXZlbnQudHlwZSkgPiAtMSkge1xuICAgICAgICByZXR1cm4gc2V0dGluZ3MuZHJhZ1RocmVzaG9sZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNldHRpbmdzLnN3aXBlVGhyZXNob2xkO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgc3dpcGUgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtzZWxmfVxuICAgICAqL1xuICAgIGVuYWJsZTogZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgICAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgICAgQ29tcG9uZW50cy5UcmFuc2l0aW9uLmVuYWJsZSgpO1xuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyBzd2lwZSBldmVudC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge3NlbGZ9XG4gICAgICovXG4gICAgZGlzYWJsZTogZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICAgIGRpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgQ29tcG9uZW50cy5UcmFuc2l0aW9uLmRpc2FibGUoKTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgY29tcG9uZW50IGNsYXNzOlxuICAgKiAtIGFmdGVyIGluaXRpYWwgYnVpbGRpbmdcbiAgICovXG4gIEV2ZW50cy5vbignYnVpbGQuYWZ0ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgQ29tcG9uZW50cy5IdG1sLnJvb3QuY2xhc3NMaXN0LmFkZChHbGlkZS5zZXR0aW5ncy5jbGFzc2VzLnN3aXBlYWJsZSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgc3dpcGluZyBiaW5kaW5nczpcbiAgICogLSBvbiBkZXN0cm95aW5nLCB0byByZW1vdmUgYWRkZWQgRXZlbnRMaXN0ZW5lcnNcbiAgICovXG4gIEV2ZW50cy5vbignZGVzdHJveScsIGZ1bmN0aW9uICgpIHtcbiAgICBTd2lwZS51bmJpbmRTd2lwZVN0YXJ0KCk7XG4gICAgU3dpcGUudW5iaW5kU3dpcGVNb3ZlKCk7XG4gICAgU3dpcGUudW5iaW5kU3dpcGVFbmQoKTtcbiAgICBCaW5kZXIuZGVzdHJveSgpO1xuICB9KTtcblxuICByZXR1cm4gU3dpcGU7XG59XG5cbmZ1bmN0aW9uIGltYWdlcyAoR2xpZGUsIENvbXBvbmVudHMsIEV2ZW50cykge1xuICAvKipcbiAgICogSW5zdGFuY2Ugb2YgdGhlIGJpbmRlciBmb3IgRE9NIEV2ZW50cy5cbiAgICpcbiAgICogQHR5cGUge0V2ZW50c0JpbmRlcn1cbiAgICovXG4gIHZhciBCaW5kZXIgPSBuZXcgRXZlbnRzQmluZGVyKCk7XG5cbiAgdmFyIEltYWdlcyA9IHtcbiAgICAvKipcbiAgICAgKiBCaW5kcyBsaXN0ZW5lciB0byBnbGlkZSB3cmFwcGVyLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICBtb3VudDogZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgICB0aGlzLmJpbmQoKTtcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiBCaW5kcyBgZHJhZ3N0YXJ0YCBldmVudCBvbiB3cmFwcGVyIHRvIHByZXZlbnQgZHJhZ2dpbmcgaW1hZ2VzLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICBiaW5kOiBmdW5jdGlvbiBiaW5kKCkge1xuICAgICAgQmluZGVyLm9uKCdkcmFnc3RhcnQnLCBDb21wb25lbnRzLkh0bWwud3JhcHBlciwgdGhpcy5kcmFnc3RhcnQpO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIFVuYmluZHMgYGRyYWdzdGFydGAgZXZlbnQgb24gd3JhcHBlci5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1ZvaWR9XG4gICAgICovXG4gICAgdW5iaW5kOiBmdW5jdGlvbiB1bmJpbmQoKSB7XG4gICAgICBCaW5kZXIub2ZmKCdkcmFnc3RhcnQnLCBDb21wb25lbnRzLkh0bWwud3JhcHBlcik7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaGFuZGxlci4gUHJldmVudHMgZHJhZ2dpbmcuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtWb2lkfVxuICAgICAqL1xuICAgIGRyYWdzdGFydDogZnVuY3Rpb24gZHJhZ3N0YXJ0KGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUmVtb3ZlIGJpbmRpbmdzIGZyb20gaW1hZ2VzOlxuICAgKiAtIG9uIGRlc3Ryb3lpbmcsIHRvIHJlbW92ZSBhZGRlZCBFdmVudExpc3RlbmVyc1xuICAgKi9cbiAgRXZlbnRzLm9uKCdkZXN0cm95JywgZnVuY3Rpb24gKCkge1xuICAgIEltYWdlcy51bmJpbmQoKTtcbiAgICBCaW5kZXIuZGVzdHJveSgpO1xuICB9KTtcblxuICByZXR1cm4gSW1hZ2VzO1xufVxuXG5mdW5jdGlvbiBhbmNob3JzIChHbGlkZSwgQ29tcG9uZW50cywgRXZlbnRzKSB7XG4gIC8qKlxuICAgKiBJbnN0YW5jZSBvZiB0aGUgYmluZGVyIGZvciBET00gRXZlbnRzLlxuICAgKlxuICAgKiBAdHlwZSB7RXZlbnRzQmluZGVyfVxuICAgKi9cbiAgdmFyIEJpbmRlciA9IG5ldyBFdmVudHNCaW5kZXIoKTtcblxuICAvKipcbiAgICogSG9sZHMgZGV0YWNoaW5nIHN0YXR1cyBvZiBhbmNob3JzLlxuICAgKiBQcmV2ZW50cyBkZXRhY2hpbmcgb2YgYWxyZWFkeSBkZXRhY2hlZCBhbmNob3JzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICovXG4gIHZhciBkZXRhY2hlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBIb2xkcyBwcmV2ZW50aW5nIHN0YXR1cyBvZiBhbmNob3JzLlxuICAgKiBJZiBgdHJ1ZWAgcmVkaXJlY3Rpb24gYWZ0ZXIgY2xpY2sgd2lsbCBiZSBkaXNhYmxlZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqL1xuICB2YXIgcHJldmVudGVkID0gZmFsc2U7XG5cbiAgdmFyIEFuY2hvcnMgPSB7XG4gICAgLyoqXG4gICAgICogU2V0dXBzIGEgaW5pdGlhbCBzdGF0ZSBvZiBhbmNob3JzIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtWb2lkfVxuICAgICAqL1xuICAgIG1vdW50OiBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAgIC8qKlxuICAgICAgICogSG9sZHMgY29sbGVjdGlvbiBvZiBhbmNob3JzIGVsZW1lbnRzLlxuICAgICAgICpcbiAgICAgICAqIEBwcml2YXRlXG4gICAgICAgKiBAdHlwZSB7SFRNTENvbGxlY3Rpb259XG4gICAgICAgKi9cbiAgICAgIHRoaXMuX2EgPSBDb21wb25lbnRzLkh0bWwud3JhcHBlci5xdWVyeVNlbGVjdG9yQWxsKCdhJyk7XG5cbiAgICAgIHRoaXMuYmluZCgpO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIEJpbmRzIGV2ZW50cyB0byBhbmNob3JzIGluc2lkZSBhIHRyYWNrLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICBiaW5kOiBmdW5jdGlvbiBiaW5kKCkge1xuICAgICAgQmluZGVyLm9uKCdjbGljaycsIENvbXBvbmVudHMuSHRtbC53cmFwcGVyLCB0aGlzLmNsaWNrKTtcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiBVbmJpbmRzIGV2ZW50cyBhdHRhY2hlZCB0byBhbmNob3JzIGluc2lkZSBhIHRyYWNrLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICB1bmJpbmQ6IGZ1bmN0aW9uIHVuYmluZCgpIHtcbiAgICAgIEJpbmRlci5vZmYoJ2NsaWNrJywgQ29tcG9uZW50cy5IdG1sLndyYXBwZXIpO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXIgZm9yIGNsaWNrIGV2ZW50LiBQcmV2ZW50cyBjbGlja3Mgd2hlbiBnbGlkZSBpcyBpbiBgcHJldmVudGAgc3RhdHVzLlxuICAgICAqXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBldmVudFxuICAgICAqIEByZXR1cm4ge1ZvaWR9XG4gICAgICovXG4gICAgY2xpY2s6IGZ1bmN0aW9uIGNsaWNrKGV2ZW50KSB7XG4gICAgICBpZiAocHJldmVudGVkKSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIERldGFjaGVzIGFuY2hvcnMgY2xpY2sgZXZlbnQgaW5zaWRlIGdsaWRlLlxuICAgICAqXG4gICAgICogQHJldHVybiB7c2VsZn1cbiAgICAgKi9cbiAgICBkZXRhY2g6IGZ1bmN0aW9uIGRldGFjaCgpIHtcbiAgICAgIHByZXZlbnRlZCA9IHRydWU7XG5cbiAgICAgIGlmICghZGV0YWNoZWQpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGhpcy5pdGVtc1tpXS5kcmFnZ2FibGUgPSBmYWxzZTtcblxuICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc2V0QXR0cmlidXRlKCdkYXRhLWhyZWYnLCB0aGlzLml0ZW1zW2ldLmdldEF0dHJpYnV0ZSgnaHJlZicpKTtcblxuICAgICAgICAgIHRoaXMuaXRlbXNbaV0ucmVtb3ZlQXR0cmlidXRlKCdocmVmJyk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXRhY2hlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIEF0dGFjaGVzIGFuY2hvcnMgY2xpY2sgZXZlbnRzIGluc2lkZSBnbGlkZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge3NlbGZ9XG4gICAgICovXG4gICAgYXR0YWNoOiBmdW5jdGlvbiBhdHRhY2goKSB7XG4gICAgICBwcmV2ZW50ZWQgPSBmYWxzZTtcblxuICAgICAgaWYgKGRldGFjaGVkKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRoaXMuaXRlbXNbaV0uZHJhZ2dhYmxlID0gdHJ1ZTtcblxuICAgICAgICAgIHRoaXMuaXRlbXNbaV0uc2V0QXR0cmlidXRlKCdocmVmJywgdGhpcy5pdGVtc1tpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtaHJlZicpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRldGFjaGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfTtcblxuICBkZWZpbmUoQW5jaG9ycywgJ2l0ZW1zJywge1xuICAgIC8qKlxuICAgICAqIEdldHMgY29sbGVjdGlvbiBvZiB0aGUgYXJyb3dzIEhUTUwgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtIVE1MRWxlbWVudFtdfVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIEFuY2hvcnMuX2E7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogRGV0YWNoIGFuY2hvcnMgaW5zaWRlIHNsaWRlczpcbiAgICogLSBvbiBzd2lwaW5nLCBzbyB0aGV5IHdvbid0IHJlZGlyZWN0IHRvIGl0cyBgaHJlZmAgYXR0cmlidXRlc1xuICAgKi9cbiAgRXZlbnRzLm9uKCdzd2lwZS5tb3ZlJywgZnVuY3Rpb24gKCkge1xuICAgIEFuY2hvcnMuZGV0YWNoKCk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBdHRhY2ggYW5jaG9ycyBpbnNpZGUgc2xpZGVzOlxuICAgKiAtIGFmdGVyIHN3aXBpbmcgYW5kIHRyYW5zaXRpb25zIGVuZHMsIHNvIHRoZXkgY2FuIHJlZGlyZWN0IGFmdGVyIGNsaWNrIGFnYWluXG4gICAqL1xuICBFdmVudHMub24oJ3N3aXBlLmVuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBDb21wb25lbnRzLlRyYW5zaXRpb24uYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgQW5jaG9ycy5hdHRhY2goKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFVuYmluZCBhbmNob3JzIGluc2lkZSBzbGlkZXM6XG4gICAqIC0gb24gZGVzdHJveWluZywgdG8gYnJpbmcgYW5jaG9ycyB0byBpdHMgaW5pdGlhbCBzdGF0ZVxuICAgKi9cbiAgRXZlbnRzLm9uKCdkZXN0cm95JywgZnVuY3Rpb24gKCkge1xuICAgIEFuY2hvcnMuYXR0YWNoKCk7XG4gICAgQW5jaG9ycy51bmJpbmQoKTtcbiAgICBCaW5kZXIuZGVzdHJveSgpO1xuICB9KTtcblxuICByZXR1cm4gQW5jaG9ycztcbn1cblxudmFyIE5BVl9TRUxFQ1RPUiA9ICdbZGF0YS1nbGlkZS1lbD1cImNvbnRyb2xzW25hdl1cIl0nO1xudmFyIENPTlRST0xTX1NFTEVDVE9SID0gJ1tkYXRhLWdsaWRlLWVsXj1cImNvbnRyb2xzXCJdJztcblxuZnVuY3Rpb24gY29udHJvbHMgKEdsaWRlLCBDb21wb25lbnRzLCBFdmVudHMpIHtcbiAgLyoqXG4gICAqIEluc3RhbmNlIG9mIHRoZSBiaW5kZXIgZm9yIERPTSBFdmVudHMuXG4gICAqXG4gICAqIEB0eXBlIHtFdmVudHNCaW5kZXJ9XG4gICAqL1xuICB2YXIgQmluZGVyID0gbmV3IEV2ZW50c0JpbmRlcigpO1xuXG4gIHZhciBjYXB0dXJlID0gc3VwcG9ydHNQYXNzaXZlJDEgPyB7IHBhc3NpdmU6IHRydWUgfSA6IGZhbHNlO1xuXG4gIHZhciBDb250cm9scyA9IHtcbiAgICAvKipcbiAgICAgKiBJbml0cyBhcnJvd3MuIEJpbmRzIGV2ZW50cyBsaXN0ZW5lcnNcbiAgICAgKiB0byB0aGUgYXJyb3dzIEhUTUwgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtWb2lkfVxuICAgICAqL1xuICAgIG1vdW50OiBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAgIC8qKlxuICAgICAgICogQ29sbGVjdGlvbiBvZiBuYXZpZ2F0aW9uIEhUTUwgZWxlbWVudHMuXG4gICAgICAgKlxuICAgICAgICogQHByaXZhdGVcbiAgICAgICAqIEB0eXBlIHtIVE1MQ29sbGVjdGlvbn1cbiAgICAgICAqL1xuICAgICAgdGhpcy5fbiA9IENvbXBvbmVudHMuSHRtbC5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoTkFWX1NFTEVDVE9SKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBDb2xsZWN0aW9uIG9mIGNvbnRyb2xzIEhUTUwgZWxlbWVudHMuXG4gICAgICAgKlxuICAgICAgICogQHByaXZhdGVcbiAgICAgICAqIEB0eXBlIHtIVE1MQ29sbGVjdGlvbn1cbiAgICAgICAqL1xuICAgICAgdGhpcy5fYyA9IENvbXBvbmVudHMuSHRtbC5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoQ09OVFJPTFNfU0VMRUNUT1IpO1xuXG4gICAgICB0aGlzLmFkZEJpbmRpbmdzKCk7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhY3RpdmUgY2xhc3MgdG8gY3VycmVudCBzbGlkZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1ZvaWR9XG4gICAgICovXG4gICAgc2V0QWN0aXZlOiBmdW5jdGlvbiBzZXRBY3RpdmUoKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5hZGRDbGFzcyh0aGlzLl9uW2ldLmNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFjdGl2ZSBjbGFzcyB0byBjdXJyZW50IHNsaWRlLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICByZW1vdmVBY3RpdmU6IGZ1bmN0aW9uIHJlbW92ZUFjdGl2ZSgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbi5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLnJlbW92ZUNsYXNzKHRoaXMuX25baV0uY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgYWN0aXZlIGNsYXNzIG9uIGl0ZW1zIGluc2lkZSBuYXZpZ2F0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtICB7SFRNTEVsZW1lbnR9IGNvbnRyb2xzXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICBhZGRDbGFzczogZnVuY3Rpb24gYWRkQ2xhc3MoY29udHJvbHMpIHtcbiAgICAgIHZhciBzZXR0aW5ncyA9IEdsaWRlLnNldHRpbmdzO1xuICAgICAgdmFyIGl0ZW0gPSBjb250cm9sc1tHbGlkZS5pbmRleF07XG5cbiAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZChzZXR0aW5ncy5jbGFzc2VzLmFjdGl2ZU5hdik7XG5cbiAgICAgICAgc2libGluZ3MoaXRlbSkuZm9yRWFjaChmdW5jdGlvbiAoc2libGluZykge1xuICAgICAgICAgIHNpYmxpbmcuY2xhc3NMaXN0LnJlbW92ZShzZXR0aW5ncy5jbGFzc2VzLmFjdGl2ZU5hdik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWN0aXZlIGNsYXNzIGZyb20gYWN0aXZlIGNvbnRyb2wuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gY29udHJvbHNcbiAgICAgKiBAcmV0dXJuIHtWb2lkfVxuICAgICAqL1xuICAgIHJlbW92ZUNsYXNzOiBmdW5jdGlvbiByZW1vdmVDbGFzcyhjb250cm9scykge1xuICAgICAgdmFyIGl0ZW0gPSBjb250cm9sc1tHbGlkZS5pbmRleF07XG5cbiAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgIGl0ZW0uY2xhc3NMaXN0LnJlbW92ZShHbGlkZS5zZXR0aW5ncy5jbGFzc2VzLmFjdGl2ZU5hdik7XG4gICAgICB9XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogQWRkcyBoYW5kbGVzIHRvIHRoZSBlYWNoIGdyb3VwIG9mIGNvbnRyb2xzLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICBhZGRCaW5kaW5nczogZnVuY3Rpb24gYWRkQmluZGluZ3MoKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5iaW5kKHRoaXMuX2NbaV0uY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgaGFuZGxlcyBmcm9tIHRoZSBlYWNoIGdyb3VwIG9mIGNvbnRyb2xzLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICByZW1vdmVCaW5kaW5nczogZnVuY3Rpb24gcmVtb3ZlQmluZGluZ3MoKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy51bmJpbmQodGhpcy5fY1tpXS5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogQmluZHMgZXZlbnRzIHRvIGFycm93cyBIVE1MIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtIVE1MQ29sbGVjdGlvbn0gZWxlbWVudHNcbiAgICAgKiBAcmV0dXJuIHtWb2lkfVxuICAgICAqL1xuICAgIGJpbmQ6IGZ1bmN0aW9uIGJpbmQoZWxlbWVudHMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgQmluZGVyLm9uKCdjbGljaycsIGVsZW1lbnRzW2ldLCB0aGlzLmNsaWNrKTtcbiAgICAgICAgQmluZGVyLm9uKCd0b3VjaHN0YXJ0JywgZWxlbWVudHNbaV0sIHRoaXMuY2xpY2ssIGNhcHR1cmUpO1xuICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIFVuYmluZHMgZXZlbnRzIGJpbmRlZCB0byB0aGUgYXJyb3dzIEhUTUwgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0hUTUxDb2xsZWN0aW9ufSBlbGVtZW50c1xuICAgICAqIEByZXR1cm4ge1ZvaWR9XG4gICAgICovXG4gICAgdW5iaW5kOiBmdW5jdGlvbiB1bmJpbmQoZWxlbWVudHMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgQmluZGVyLm9mZihbJ2NsaWNrJywgJ3RvdWNoc3RhcnQnXSwgZWxlbWVudHNbaV0pO1xuICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgYGNsaWNrYCBldmVudCBvbiB0aGUgYXJyb3dzIEhUTUwgZWxlbWVudHMuXG4gICAgICogTW92ZXMgc2xpZGVyIGluIGRyaWVjdGlvbiBwcmVjaXNlZCBpblxuICAgICAqIGBkYXRhLWdsaWRlLWRpcmAgYXR0cmlidXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICBjbGljazogZnVuY3Rpb24gY2xpY2soZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIENvbXBvbmVudHMuUnVuLm1ha2UoQ29tcG9uZW50cy5EaXJlY3Rpb24ucmVzb2x2ZShldmVudC5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1nbGlkZS1kaXInKSkpO1xuICAgIH1cbiAgfTtcblxuICBkZWZpbmUoQ29udHJvbHMsICdpdGVtcycsIHtcbiAgICAvKipcbiAgICAgKiBHZXRzIGNvbGxlY3Rpb24gb2YgdGhlIGNvbnRyb2xzIEhUTUwgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtIVE1MRWxlbWVudFtdfVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIENvbnRyb2xzLl9jO1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIFN3YXAgYWN0aXZlIGNsYXNzIG9mIGN1cnJlbnQgbmF2aWdhdGlvbiBpdGVtOlxuICAgKiAtIGFmdGVyIG1vdW50aW5nIHRvIHNldCBpdCB0byBpbml0aWFsIGluZGV4XG4gICAqIC0gYWZ0ZXIgZWFjaCBtb3ZlIHRvIHRoZSBuZXcgaW5kZXhcbiAgICovXG4gIEV2ZW50cy5vbihbJ21vdW50LmFmdGVyJywgJ21vdmUuYWZ0ZXInXSwgZnVuY3Rpb24gKCkge1xuICAgIENvbnRyb2xzLnNldEFjdGl2ZSgpO1xuICB9KTtcblxuICAvKipcbiAgICogUmVtb3ZlIGJpbmRpbmdzIGFuZCBIVE1MIENsYXNzZXM6XG4gICAqIC0gb24gZGVzdHJveWluZywgdG8gYnJpbmcgbWFya3VwIHRvIGl0cyBpbml0aWFsIHN0YXRlXG4gICAqL1xuICBFdmVudHMub24oJ2Rlc3Ryb3knLCBmdW5jdGlvbiAoKSB7XG4gICAgQ29udHJvbHMucmVtb3ZlQmluZGluZ3MoKTtcbiAgICBDb250cm9scy5yZW1vdmVBY3RpdmUoKTtcbiAgICBCaW5kZXIuZGVzdHJveSgpO1xuICB9KTtcblxuICByZXR1cm4gQ29udHJvbHM7XG59XG5cbmZ1bmN0aW9uIGtleWJvYXJkIChHbGlkZSwgQ29tcG9uZW50cywgRXZlbnRzKSB7XG4gIC8qKlxuICAgKiBJbnN0YW5jZSBvZiB0aGUgYmluZGVyIGZvciBET00gRXZlbnRzLlxuICAgKlxuICAgKiBAdHlwZSB7RXZlbnRzQmluZGVyfVxuICAgKi9cbiAgdmFyIEJpbmRlciA9IG5ldyBFdmVudHNCaW5kZXIoKTtcblxuICB2YXIgS2V5Ym9hcmQgPSB7XG4gICAgLyoqXG4gICAgICogQmluZHMga2V5Ym9hcmQgZXZlbnRzIG9uIGNvbXBvbmVudCBtb3VudC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1ZvaWR9XG4gICAgICovXG4gICAgbW91bnQ6IGZ1bmN0aW9uIG1vdW50KCkge1xuICAgICAgaWYgKEdsaWRlLnNldHRpbmdzLmtleWJvYXJkKSB7XG4gICAgICAgIHRoaXMuYmluZCgpO1xuICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIEFkZHMga2V5Ym9hcmQgcHJlc3MgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICBiaW5kOiBmdW5jdGlvbiBiaW5kKCkge1xuICAgICAgQmluZGVyLm9uKCdrZXl1cCcsIGRvY3VtZW50LCB0aGlzLnByZXNzKTtcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGtleWJvYXJkIHByZXNzIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1ZvaWR9XG4gICAgICovXG4gICAgdW5iaW5kOiBmdW5jdGlvbiB1bmJpbmQoKSB7XG4gICAgICBCaW5kZXIub2ZmKCdrZXl1cCcsIGRvY3VtZW50KTtcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGtleWJvYXJkJ3MgYXJyb3dzIHByZXNzIGFuZCBtb3ZpbmcgZ2xpZGUgZm93YXJkIGFuZCBiYWNrd2FyZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAge09iamVjdH0gZXZlbnRcbiAgICAgKiBAcmV0dXJuIHtWb2lkfVxuICAgICAqL1xuICAgIHByZXNzOiBmdW5jdGlvbiBwcmVzcyhldmVudCkge1xuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDM5KSB7XG4gICAgICAgIENvbXBvbmVudHMuUnVuLm1ha2UoQ29tcG9uZW50cy5EaXJlY3Rpb24ucmVzb2x2ZSgnPicpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDM3KSB7XG4gICAgICAgIENvbXBvbmVudHMuUnVuLm1ha2UoQ29tcG9uZW50cy5EaXJlY3Rpb24ucmVzb2x2ZSgnPCcpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBiaW5kaW5ncyBmcm9tIGtleWJvYXJkOlxuICAgKiAtIG9uIGRlc3Ryb3lpbmcgdG8gcmVtb3ZlIGFkZGVkIGV2ZW50c1xuICAgKiAtIG9uIHVwZGF0aW5nIHRvIHJlbW92ZSBldmVudHMgYmVmb3JlIHJlbW91bnRpbmdcbiAgICovXG4gIEV2ZW50cy5vbihbJ2Rlc3Ryb3knLCAndXBkYXRlJ10sIGZ1bmN0aW9uICgpIHtcbiAgICBLZXlib2FyZC51bmJpbmQoKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFJlbW91bnQgY29tcG9uZW50XG4gICAqIC0gb24gdXBkYXRpbmcgdG8gcmVmbGVjdCBwb3RlbnRpYWwgY2hhbmdlcyBpbiBzZXR0aW5nc1xuICAgKi9cbiAgRXZlbnRzLm9uKCd1cGRhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgS2V5Ym9hcmQubW91bnQoKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kgYmluZGVyOlxuICAgKiAtIG9uIGRlc3Ryb3lpbmcgdG8gcmVtb3ZlIGxpc3RlbmVyc1xuICAgKi9cbiAgRXZlbnRzLm9uKCdkZXN0cm95JywgZnVuY3Rpb24gKCkge1xuICAgIEJpbmRlci5kZXN0cm95KCk7XG4gIH0pO1xuXG4gIHJldHVybiBLZXlib2FyZDtcbn1cblxuZnVuY3Rpb24gYXV0b3BsYXkgKEdsaWRlLCBDb21wb25lbnRzLCBFdmVudHMpIHtcbiAgLyoqXG4gICAqIEluc3RhbmNlIG9mIHRoZSBiaW5kZXIgZm9yIERPTSBFdmVudHMuXG4gICAqXG4gICAqIEB0eXBlIHtFdmVudHNCaW5kZXJ9XG4gICAqL1xuICB2YXIgQmluZGVyID0gbmV3IEV2ZW50c0JpbmRlcigpO1xuXG4gIHZhciBBdXRvcGxheSA9IHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyBhdXRvcGxheWluZyBhbmQgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICBtb3VudDogZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgICB0aGlzLnN0YXJ0KCk7XG5cbiAgICAgIGlmIChHbGlkZS5zZXR0aW5ncy5ob3ZlcnBhdXNlKSB7XG4gICAgICAgIHRoaXMuYmluZCgpO1xuICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIFN0YXJ0cyBhdXRvcGxheWluZyBpbiBjb25maWd1cmVkIGludGVydmFsLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtCb29sZWFufE51bWJlcn0gZm9yY2UgUnVuIGF1dG9wbGF5aW5nIHdpdGggcGFzc2VkIGludGVydmFsIHJlZ2FyZGxlc3Mgb2YgYGF1dG9wbGF5YCBzZXR0aW5nc1xuICAgICAqIEByZXR1cm4ge1ZvaWR9XG4gICAgICovXG4gICAgc3RhcnQ6IGZ1bmN0aW9uIHN0YXJ0KCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKEdsaWRlLnNldHRpbmdzLmF1dG9wbGF5KSB7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZCh0aGlzLl9pKSkge1xuICAgICAgICAgIHRoaXMuX2kgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5zdG9wKCk7XG5cbiAgICAgICAgICAgIENvbXBvbmVudHMuUnVuLm1ha2UoJz4nKTtcblxuICAgICAgICAgICAgX3RoaXMuc3RhcnQoKTtcbiAgICAgICAgICB9LCB0aGlzLnRpbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogU3RvcHMgYXV0b3J1bm5pbmcgb2YgdGhlIGdsaWRlLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Vm9pZH1cbiAgICAgKi9cbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgdGhpcy5faSA9IGNsZWFySW50ZXJ2YWwodGhpcy5faSk7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogU3RvcHMgYXV0b3BsYXlpbmcgd2hpbGUgbW91c2UgaXMgb3ZlciBnbGlkZSdzIGFyZWEuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtWb2lkfVxuICAgICAqL1xuICAgIGJpbmQ6IGZ1bmN0aW9uIGJpbmQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgQmluZGVyLm9uKCdtb3VzZW92ZXInLCBDb21wb25lbnRzLkh0bWwucm9vdCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIuc3RvcCgpO1xuICAgICAgfSk7XG5cbiAgICAgIEJpbmRlci5vbignbW91c2VvdXQnLCBDb21wb25lbnRzLkh0bWwucm9vdCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIuc3RhcnQoKTtcbiAgICAgIH0pO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIFVuYmluZCBtb3VzZW92ZXIgZXZlbnRzLlxuICAgICAqXG4gICAgICogQHJldHVybnMge1ZvaWR9XG4gICAgICovXG4gICAgdW5iaW5kOiBmdW5jdGlvbiB1bmJpbmQoKSB7XG4gICAgICBCaW5kZXIub2ZmKFsnbW91c2VvdmVyJywgJ21vdXNlb3V0J10sIENvbXBvbmVudHMuSHRtbC5yb290KTtcbiAgICB9XG4gIH07XG5cbiAgZGVmaW5lKEF1dG9wbGF5LCAndGltZScsIHtcbiAgICAvKipcbiAgICAgKiBHZXRzIHRpbWUgcGVyaW9kIHZhbHVlIGZvciB0aGUgYXV0b3BsYXkgaW50ZXJ2YWwuIFByaW9yaXRpemVzXG4gICAgICogdGltZXMgaW4gYGRhdGEtZ2xpZGUtYXV0b3BsYXlgIGF0dHJ1YnV0ZXMgb3ZlciBvcHRpb25zLlxuICAgICAqXG4gICAgICogQHJldHVybiB7TnVtYmVyfVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIGF1dG9wbGF5ID0gQ29tcG9uZW50cy5IdG1sLnNsaWRlc1tHbGlkZS5pbmRleF0uZ2V0QXR0cmlidXRlKCdkYXRhLWdsaWRlLWF1dG9wbGF5Jyk7XG5cbiAgICAgIGlmIChhdXRvcGxheSkge1xuICAgICAgICByZXR1cm4gdG9JbnQoYXV0b3BsYXkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdG9JbnQoR2xpZGUuc2V0dGluZ3MuYXV0b3BsYXkpO1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIFN0b3AgYXV0b3BsYXlpbmcgYW5kIHVuYmluZCBldmVudHM6XG4gICAqIC0gb24gZGVzdHJveWluZywgdG8gY2xlYXIgZGVmaW5lZCBpbnRlcnZhbFxuICAgKiAtIG9uIHVwZGF0aW5nIHZpYSBBUEkgdG8gcmVzZXQgaW50ZXJ2YWwgdGhhdCBtYXkgY2hhbmdlZFxuICAgKi9cbiAgRXZlbnRzLm9uKFsnZGVzdHJveScsICd1cGRhdGUnXSwgZnVuY3Rpb24gKCkge1xuICAgIEF1dG9wbGF5LnVuYmluZCgpO1xuICB9KTtcblxuICAvKipcbiAgICogU3RvcCBhdXRvcGxheWluZzpcbiAgICogLSBiZWZvcmUgZWFjaCBydW4sIHRvIHJlc3RhcnQgYXV0b3BsYXlpbmdcbiAgICogLSBvbiBwYXVzaW5nIHZpYSBBUElcbiAgICogLSBvbiBkZXN0cm95aW5nLCB0byBjbGVhciBkZWZpbmVkIGludGVydmFsXG4gICAqIC0gd2hpbGUgc3RhcnRpbmcgYSBzd2lwZVxuICAgKiAtIG9uIHVwZGF0aW5nIHZpYSBBUEkgdG8gcmVzZXQgaW50ZXJ2YWwgdGhhdCBtYXkgY2hhbmdlZFxuICAgKi9cbiAgRXZlbnRzLm9uKFsncnVuLmJlZm9yZScsICdwYXVzZScsICdkZXN0cm95JywgJ3N3aXBlLnN0YXJ0JywgJ3VwZGF0ZSddLCBmdW5jdGlvbiAoKSB7XG4gICAgQXV0b3BsYXkuc3RvcCgpO1xuICB9KTtcblxuICAvKipcbiAgICogU3RhcnQgYXV0b3BsYXlpbmc6XG4gICAqIC0gYWZ0ZXIgZWFjaCBydW4sIHRvIHJlc3RhcnQgYXV0b3BsYXlpbmdcbiAgICogLSBvbiBwbGF5aW5nIHZpYSBBUElcbiAgICogLSB3aGlsZSBlbmRpbmcgYSBzd2lwZVxuICAgKi9cbiAgRXZlbnRzLm9uKFsncnVuLmFmdGVyJywgJ3BsYXknLCAnc3dpcGUuZW5kJ10sIGZ1bmN0aW9uICgpIHtcbiAgICBBdXRvcGxheS5zdGFydCgpO1xuICB9KTtcblxuICAvKipcbiAgICogUmVtb3VudCBhdXRvcGxheWluZzpcbiAgICogLSBvbiB1cGRhdGluZyB2aWEgQVBJIHRvIHJlc2V0IGludGVydmFsIHRoYXQgbWF5IGNoYW5nZWRcbiAgICovXG4gIEV2ZW50cy5vbigndXBkYXRlJywgZnVuY3Rpb24gKCkge1xuICAgIEF1dG9wbGF5Lm1vdW50KCk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBEZXN0cm95IGEgYmluZGVyOlxuICAgKiAtIG9uIGRlc3Ryb3lpbmcgZ2xpZGUgaW5zdGFuY2UgdG8gY2xlYXJ1cCBsaXN0ZW5lcnNcbiAgICovXG4gIEV2ZW50cy5vbignZGVzdHJveScsIGZ1bmN0aW9uICgpIHtcbiAgICBCaW5kZXIuZGVzdHJveSgpO1xuICB9KTtcblxuICByZXR1cm4gQXV0b3BsYXk7XG59XG5cbi8qKlxuICogU29ydHMga2V5cyBvZiBicmVha3BvaW50IG9iamVjdCBzbyB0aGV5IHdpbGwgYmUgb3JkZXJlZCBmcm9tIGxvd2VyIHRvIGJpZ2dlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcG9pbnRzXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBzb3J0QnJlYWtwb2ludHMocG9pbnRzKSB7XG4gIGlmIChpc09iamVjdChwb2ludHMpKSB7XG4gICAgcmV0dXJuIHNvcnRLZXlzKHBvaW50cyk7XG4gIH0gZWxzZSB7XG4gICAgd2FybignQnJlYWtwb2ludHMgb3B0aW9uIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICByZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIGJyZWFrcG9pbnRzIChHbGlkZSwgQ29tcG9uZW50cywgRXZlbnRzKSB7XG4gIC8qKlxuICAgKiBJbnN0YW5jZSBvZiB0aGUgYmluZGVyIGZvciBET00gRXZlbnRzLlxuICAgKlxuICAgKiBAdHlwZSB7RXZlbnRzQmluZGVyfVxuICAgKi9cbiAgdmFyIEJpbmRlciA9IG5ldyBFdmVudHNCaW5kZXIoKTtcblxuICAvKipcbiAgICogSG9sZHMgcmVmZXJlbmNlIHRvIHNldHRpbmdzLlxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIHNldHRpbmdzID0gR2xpZGUuc2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIEhvbGRzIHJlZmVyZW5jZSB0byBicmVha3BvaW50cyBvYmplY3QgaW4gc2V0dGluZ3MuIFNvcnRzIGJyZWFrcG9pbnRzXG4gICAqIGZyb20gc21hbGxlciB0byBsYXJnZXIuIEl0IGlzIHJlcXVpcmVkIGluIG9yZGVyIHRvIHByb3BlclxuICAgKiBtYXRjaGluZyBjdXJyZW50bHkgYWN0aXZlIGJyZWFrcG9pbnQgc2V0dGluZ3MuXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB2YXIgcG9pbnRzID0gc29ydEJyZWFrcG9pbnRzKHNldHRpbmdzLmJyZWFrcG9pbnRzKTtcblxuICAvKipcbiAgICogQ2FjaGUgaW5pdGlhbCBzZXR0aW5ncyBiZWZvcmUgb3ZlcndyaXR0aW5nLlxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIGRlZmF1bHRzID0gX2V4dGVuZHMoe30sIHNldHRpbmdzKTtcblxuICB2YXIgQnJlYWtwb2ludHMgPSB7XG4gICAgLyoqXG4gICAgICogTWF0Y2hlcyBzZXR0aW5ncyBmb3IgY3VycmVjdGx5IG1hdGNoaW5nIG1lZGlhIGJyZWFrcG9pbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gcG9pbnRzXG4gICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAgKi9cbiAgICBtYXRjaDogZnVuY3Rpb24gbWF0Y2gocG9pbnRzKSB7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdy5tYXRjaE1lZGlhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBmb3IgKHZhciBwb2ludCBpbiBwb2ludHMpIHtcbiAgICAgICAgICBpZiAocG9pbnRzLmhhc093blByb3BlcnR5KHBvaW50KSkge1xuICAgICAgICAgICAgaWYgKHdpbmRvdy5tYXRjaE1lZGlhKCcobWF4LXdpZHRoOiAnICsgcG9pbnQgKyAncHgpJykubWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gcG9pbnRzW3BvaW50XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogT3ZlcndyaXRlIGluc3RhbmNlIHNldHRpbmdzIHdpdGggY3VycmVudGx5IG1hdGNoaW5nIGJyZWFrcG9pbnQgc2V0dGluZ3MuXG4gICAqIFRoaXMgaGFwcGVucyByaWdodCBhZnRlciBjb21wb25lbnQgaW5pdGlhbGl6YXRpb24uXG4gICAqL1xuICBfZXh0ZW5kcyhzZXR0aW5ncywgQnJlYWtwb2ludHMubWF0Y2gocG9pbnRzKSk7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBnbGlkZSB3aXRoIHNldHRpbmdzIG9mIG1hdGNoZWQgYnJla3BvaW50OlxuICAgKiAtIHdpbmRvdyByZXNpemUgdG8gdXBkYXRlIHNsaWRlclxuICAgKi9cbiAgQmluZGVyLm9uKCdyZXNpemUnLCB3aW5kb3csIHRocm90dGxlKGZ1bmN0aW9uICgpIHtcbiAgICBHbGlkZS5zZXR0aW5ncyA9IG1lcmdlT3B0aW9ucyhzZXR0aW5ncywgQnJlYWtwb2ludHMubWF0Y2gocG9pbnRzKSk7XG4gIH0sIEdsaWRlLnNldHRpbmdzLnRocm90dGxlKSk7XG5cbiAgLyoqXG4gICAqIFJlc29ydCBhbmQgdXBkYXRlIGRlZmF1bHQgc2V0dGluZ3M6XG4gICAqIC0gb24gcmVpbml0IHZpYSBBUEksIHNvIGJyZWFrcG9pbnQgbWF0Y2hpbmcgd2lsbCBiZSBwZXJmb3JtZWQgd2l0aCBvcHRpb25zXG4gICAqL1xuICBFdmVudHMub24oJ3VwZGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICBwb2ludHMgPSBzb3J0QnJlYWtwb2ludHMocG9pbnRzKTtcblxuICAgIGRlZmF1bHRzID0gX2V4dGVuZHMoe30sIHNldHRpbmdzKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFVuYmluZCByZXNpemUgbGlzdGVuZXI6XG4gICAqIC0gb24gZGVzdHJveWluZywgdG8gYnJpbmcgbWFya3VwIHRvIGl0cyBpbml0aWFsIHN0YXRlXG4gICAqL1xuICBFdmVudHMub24oJ2Rlc3Ryb3knLCBmdW5jdGlvbiAoKSB7XG4gICAgQmluZGVyLm9mZigncmVzaXplJywgd2luZG93KTtcbiAgfSk7XG5cbiAgcmV0dXJuIEJyZWFrcG9pbnRzO1xufVxuXG52YXIgQ09NUE9ORU5UUyA9IHtcbiAgSHRtbDogSHRtbCxcbiAgVHJhbnNsYXRlOiBUcmFuc2xhdGUsXG4gIFRyYW5zaXRpb246IFRyYW5zaXRpb24sXG4gIERpcmVjdGlvbjogRGlyZWN0aW9uLFxuICBQZWVrOiBQZWVrLFxuICBTaXplczogU2l6ZXMsXG4gIEdhcHM6IEdhcHMsXG4gIE1vdmU6IE1vdmUsXG4gIENsb25lczogQ2xvbmVzLFxuICBSZXNpemU6IFJlc2l6ZSxcbiAgQnVpbGQ6IEJ1aWxkLFxuICBSdW46IFJ1blxufTtcblxudmFyIEdsaWRlJDEgPSBmdW5jdGlvbiAoX0NvcmUpIHtcbiAgaW5oZXJpdHMoR2xpZGUkJDEsIF9Db3JlKTtcblxuICBmdW5jdGlvbiBHbGlkZSQkMSgpIHtcbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBHbGlkZSQkMSk7XG4gICAgcmV0dXJuIHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEdsaWRlJCQxLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoR2xpZGUkJDEpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfVxuXG4gIGNyZWF0ZUNsYXNzKEdsaWRlJCQxLCBbe1xuICAgIGtleTogJ21vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgICB2YXIgZXh0ZW5zaW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG5cbiAgICAgIHJldHVybiBnZXQoR2xpZGUkJDEucHJvdG90eXBlLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoR2xpZGUkJDEucHJvdG90eXBlKSwgJ21vdW50JywgdGhpcykuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7fSwgQ09NUE9ORU5UUywgZXh0ZW5zaW9ucykpO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gR2xpZGUkJDE7XG59KEdsaWRlKTtcblxuZXhwb3J0IGRlZmF1bHQgR2xpZGUkMTtcbmV4cG9ydCB7IHN3aXBlIGFzIFN3aXBlLCBpbWFnZXMgYXMgSW1hZ2VzLCBhbmNob3JzIGFzIEFuY2hvcnMsIGNvbnRyb2xzIGFzIENvbnRyb2xzLCBrZXlib2FyZCBhcyBLZXlib2FyZCwgYXV0b3BsYXkgYXMgQXV0b3BsYXksIGJyZWFrcG9pbnRzIGFzIEJyZWFrcG9pbnRzIH07XG4iLCJpbXBvcnQgeyBjcmVhdGVGb250RmFjZXMgfSBmcm9tICcuLi8uLi9saWIvaGVscGVycydcbmltcG9ydCBzY3NzIGZyb20gJy4vZGVza3RvcC5zY3NzJ1xuaW1wb3J0IEdsaWRlLCB7IENvbnRyb2xzLCBCcmVha3BvaW50cywgU3dpcGUgfSBmcm9tICcuLi8uLi9saWIvZ2xpZGUvZ2xpZGUubW9kdWxhci5lc20nXG4vLyBDYXJvdXNlbFxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDcmVhdGl2ZURlc2t0b3Age1xuXHRjb25zdHJ1Y3Rvcih2cGFpZCwgYWRDb250YWluZXIpIHtcblx0XHR0aGlzLnZwYWlkID0gdnBhaWRcblx0XHR0aGlzLnNsb3QgPSB2cGFpZC5zbG90X1xuXHRcdHRoaXMudmlkZW9TbG90ID0gdGhpcy52cGFpZC52aWRlb1Nsb3RfXG5cdFx0dGhpcy5jb250YWluZXIgPSBhZENvbnRhaW5lclxuXHRcdHRoaXMucGFyYW1zID0gdGhpcy52cGFpZC5wYXJhbWV0ZXJzX1xuXHRcdHRoaXMuaW1nID0gdGhpcy5wYXJhbXMuaW1nQmFzZVJvdXRlXG5cdFx0dGhpcy5zdGF0ZSA9IHtcblx0XHRcdGNhcm91c2VsOiB7XG5cdFx0XHRcdHZpbGxhczoge1xuXHRcdFx0XHRcdGlkOiAndmlsbGFzJyxcblx0XHRcdFx0XHRtb3VudGVkOiBudWxsLFxuXHRcdFx0XHRcdGN1cnJlbnRJbmRleDogMCxcblx0XHRcdFx0XHRzbGlkZXM6IFtcblx0XHRcdFx0XHRcdHsgc3JjOiBgJHt0aGlzLmltZ30vcGFnZXMvdHdvL3NsaWRlcy9zLTEtbWluLW5ldy5wbmdgLCBjdGE6ICdjdGEtdmlsbGFzJyB9LFxuXHRcdFx0XHRcdFx0eyBzcmM6IGAke3RoaXMuaW1nfS9wYWdlcy90d28vc2xpZGVzL3MtMi1taW4tbmV3LnBuZ2AsIGN0YTogJ2N0YS12aWxsYXMnIH0sXG5cdFx0XHRcdFx0XHR7IHNyYzogYCR7dGhpcy5pbWd9L3BhZ2VzL3R3by9zbGlkZXMvcy0zLW1pbi1uZXcucG5nYCwgY3RhOiAnY3RhLXZpbGxhcycgfSxcblx0XHRcdFx0XHRcdHsgc3JjOiBgJHt0aGlzLmltZ30vcGFnZXMvdHdvL3NsaWRlcy9zLTQtbWluLW5ldy5wbmdgLCBjdGE6ICdjdGEtdmlsbGFzJyB9XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRyZXNvcnRzOiB7XG5cdFx0XHRcdFx0aWQ6ICdyZXNvcnRzJyxcblx0XHRcdFx0XHRtb3VudGVkOiBudWxsLFxuXHRcdFx0XHRcdGN1cnJlbnRJbmRleDogMCxcblx0XHRcdFx0XHRzbGlkZXM6IFtcblx0XHRcdFx0XHRcdHsgc3JjOiBgJHt0aGlzLmltZ30vcGFnZXMvdGhyZWUvc2xpZGVzL3MtMS1taW4tbmV3LnBuZ2AsIGN0YTogJ2N0YS1yZXNvcnRzLXNleWNoZWxsZXMnIH0sXG5cdFx0XHRcdFx0XHR7IHNyYzogYCR7dGhpcy5pbWd9L3BhZ2VzL3RocmVlL3NsaWRlcy9zLTItbWluLW5ldy5wbmdgLCBjdGE6ICdjdGEtcmVzb3J0cy1jZWZhbHUnIH0sXG5cdFx0XHRcdFx0XHR7IHNyYzogYCR7dGhpcy5pbWd9L3BhZ2VzL3RocmVlL3NsaWRlcy9zLTMtbWluLW5ldy5wbmdgLCBjdGE6ICdjdGEtcmVzb3J0cy1taWNoZXMnIH0sXG5cdFx0XHRcdFx0XHR7IHNyYzogYCR7dGhpcy5pbWd9L3BhZ2VzL3RocmVlL3NsaWRlcy9zLTQtbWluLW5ldy5wbmdgLCBjdGE6ICdjdGEtcmVzb3J0cy1wbGFudGF0aW9uJyB9XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsdXh1cnk6IHtcblx0XHRcdFx0XHRpZDogJ2x1eHVyeScsXG5cdFx0XHRcdFx0bW91bnRlZDogbnVsbCxcblx0XHRcdFx0XHRjdXJyZW50SW5kZXg6IDAsXG5cdFx0XHRcdFx0c2xpZGVzOiBbXG5cdFx0XHRcdFx0XHR7IGluZGV4OiAwLCBzcmM6IGAke3RoaXMuaW1nfS9wYWdlcy9mb3VyL3NsaWRlcy9zLTEtbWluLW5ldy5wbmdgLCBjdGE6ICdjdGEtbHV4dXJ5LWJyYXppbCcgfSxcblx0XHRcdFx0XHRcdHsgaW5kZXg6IDEsIHNyYzogYCR7dGhpcy5pbWd9L3BhZ2VzL2ZvdXIvc2xpZGVzL3MtMi1taW4tbmV3LnBuZ2AsIGN0YTogJ2N0YS1sdXh1cnktbW9yb2NjbycgfSxcblx0XHRcdFx0XHRcdHsgaW5kZXg6IDIsIHNyYzogYCR7dGhpcy5pbWd9L3BhZ2VzL2ZvdXIvc2xpZGVzL3MtMy1taW4tbmV3LnBuZ2AsIGN0YTogJ2N0YS1sdXh1cnktbWV4aWNvJyB9LFxuXHRcdFx0XHRcdFx0eyBpbmRleDogMywgc3JjOiBgJHt0aGlzLmltZ30vcGFnZXMvZm91ci9zbGlkZXMvcy00LW1pbi1uZXcucG5nYCwgY3RhOiAnY3RhLWx1eHVyeS1kb21pbmljYW4nIH0sXG5cdFx0XHRcdFx0XHR7IGluZGV4OiA0LCBzcmM6IGAke3RoaXMuaW1nfS9wYWdlcy9mb3VyL3NsaWRlcy9zLTUtbWluLW5ldy5wbmdgLCBjdGE6ICdjdGEtbHV4dXJ5LWNhbmFkYScgfVxuXHRcdFx0XHRcdF1cblx0XHRcdFx0fSxcblx0XHRcdFx0bWFzdGVkOiB7XG5cdFx0XHRcdFx0aWQ6ICdtYXN0ZWQnLFxuXHRcdFx0XHRcdG1vdW50ZWQ6IG51bGwsXG5cdFx0XHRcdFx0Y3VycmVudEluZGV4OiAwLFxuXHRcdFx0XHRcdHNsaWRlczogW1xuXHRcdFx0XHRcdFx0eyBzcmM6IGAke3RoaXMuaW1nfS9wYWdlcy9maXZlL3NsaWRlcy9zLTEtbWluLW5ldy5wbmdgLCBjdGE6ICdjdGEtaG9tZScgfSxcblx0XHRcdFx0XHRcdHsgc3JjOiBgJHt0aGlzLmltZ30vcGFnZXMvZml2ZS9zbGlkZXMvcy0yLW1pbi1uZXcucG5nYCwgY3RhOiAnY3RhLWhvbWUnIH1cblx0XHRcdFx0XHRdXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBMb2FkIHN0eWxlc1xuXHRcdHRoaXMudnBhaWQuaURvYy5oZWFkLmFwcGVuZENoaWxkKGNyZWF0ZUZvbnRGYWNlcyh0aGlzLnBhcmFtcy5mb250cykpXG5cdFx0dGhpcy52cGFpZC5pRG9jLmhlYWQuYXBwZW5kQ2hpbGQoPHN0eWxlPntzY3NzLnRvU3RyaW5nKCl9PC9zdHlsZT4pXG5cblx0XHRjb25zdCBDVEFCdXR0b24gPSAobGlua05hbWUpID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPXtgY3RhLWJ1dHRvbiBjdGEtJHtsaW5rTmFtZX1gfSBvbkNsaWNrPXsoZSkgPT4gdGhpcy5oYW5kbGVDVEEoZSwgbGlua05hbWUpfT5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGV4dFwiPkRpc2NvdmVyIE1vcmU8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaWNvbi13cmFwcGVyXCI+XG5cdFx0XHRcdFx0XHQ8aW1nIHNyYz17YCR7dGhpcy5pbWd9L2N0YS1idXR0b24tYXJyb3cuc3ZnYH0gYWx0PVwiQXJyb3dcIiAvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdClcblx0XHR9XG5cblx0XHRjb25zdCBwYWdlT25lID0gKCkgPT4ge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PGRpdiBjbGFzcz1cInBhZ2UgcGFnZS1maXJzdC1wYWdlIGN1cnJlbnQtcGFnZVwiPlxuXHRcdFx0XHRcdDxpbWcgY2xhc3M9XCJwYWdlLWJhY2tncm91bmRcIiBzcmM9e2Ake3RoaXMuaW1nfS9wYWdlcy9ob21lL2hvbWUtYmctbWluLXNtYWxsLnBuZ2B9IGFsdD1cIkJhY2tncm91bmRcIiAvPlxuXHRcdFx0XHRcdDxpbWcgY2xhc3M9XCJsdXh1cnlcIiBzcmM9e2Ake3RoaXMuaW1nfS9wYWdlcy9ob21lL2x1eHVyeS5zdmdgfSBhbHQ9XCJMdXh1cnlcIiAvPlxuXHRcdFx0XHRcdHtDVEFCdXR0b24oJ2N0YS1ob21lJyl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdGNvbnN0IHBhZ2VUd28gPSAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwicGFnZSBwYWdlLXNlY29uZC1wYWdlXCI+XG5cdFx0XHRcdFx0PGltZyBjbGFzcz1cInBhZ2UtYmFja2dyb3VuZFwiIHNyYz17YCR7dGhpcy5pbWd9L3BhZ2VzL3R3by90d28tYmctbWluLXNtYWxsLnBuZ2B9IGFsdD1cIkJhY2tncm91bmRcIiAvPlxuXHRcdFx0XHRcdDxpbWcgY2xhc3M9XCJ0ZXh0XCIgc3JjPXtgJHt0aGlzLmltZ30vcGFnZXMvdHdvL3R3by10ZXh0LnN2Z2B9IGFsdD1cIlRleHRcIiAvPlxuXHRcdFx0XHRcdHtDVEFCdXR0b24oJ2N0YS12aWxsYXMnKX1cblx0XHRcdFx0XHR7dGhpcy5jYXJvdXNlbCh0aGlzLnN0YXRlLmNhcm91c2VsLnZpbGxhcy5pZCwgdGhpcy5zdGF0ZS5jYXJvdXNlbC52aWxsYXMuc2xpZGVzLCAnc3F1YXJlJyl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdGNvbnN0IHBhZ2VUaHJlZSA9ICgpID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJwYWdlIHBhZ2UtdGhpcmQtcGFnZVwiPlxuXHRcdFx0XHRcdDxpbWcgY2xhc3M9XCJwYWdlLWJhY2tncm91bmRcIiBzcmM9e2Ake3RoaXMuaW1nfS9wYWdlcy90aHJlZS90aHJlZS1iZy1taW4tc21hbGwucG5nYH0gYWx0PVwiQmFja2dyb3VuZFwiIC8+XG5cdFx0XHRcdFx0e0NUQUJ1dHRvbignY3RhLXJlc29ydHMnKX1cblx0XHRcdFx0XHR7dGhpcy5jYXJvdXNlbCh0aGlzLnN0YXRlLmNhcm91c2VsLnJlc29ydHMuaWQsIHRoaXMuc3RhdGUuY2Fyb3VzZWwucmVzb3J0cy5zbGlkZXMsICdmdWxsLXdpZHRoJyl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdGNvbnN0IHBhZ2VGb3VyID0gKCkgPT4ge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PGRpdiBjbGFzcz1cInBhZ2UgcGFnZS1mb3VydGgtcGFnZVwiPlxuXHRcdFx0XHRcdDxpbWcgY2xhc3M9XCJwYWdlLWJhY2tncm91bmRcIiBzcmM9e2Ake3RoaXMuaW1nfS9wYWdlcy9mb3VyL2ZvdXItYmctbWluLXNtYWxsLnBuZ2B9IGFsdD1cIkJhY2tncm91bmRcIiAvPlxuXHRcdFx0XHRcdDxpbWcgY2xhc3M9XCJ0ZXh0XCIgc3JjPXtgJHt0aGlzLmltZ30vcGFnZXMvZm91ci9mb3VyLXRleHQuc3ZnYH0gYWx0PVwiVGV4dFwiIC8+XG5cdFx0XHRcdFx0e3RoaXMuY2Fyb3VzZWwodGhpcy5zdGF0ZS5jYXJvdXNlbC5sdXh1cnkuaWQsIHRoaXMuc3RhdGUuY2Fyb3VzZWwubHV4dXJ5LnNsaWRlcywgJ3NxdWFyZScpfVxuXHRcdFx0XHRcdHtDVEFCdXR0b24oJ2N0YS1sdXh1cnknKX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0Y29uc3QgcGFnZUZpdmUgPSAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwicGFnZSBwYWdlLWZpZnRoLXBhZ2VcIj5cblx0XHRcdFx0XHQ8aW1nIGNsYXNzPVwicGFnZS1iYWNrZ3JvdW5kXCIgc3JjPXtgJHt0aGlzLmltZ30vcGFnZXMvZml2ZS9maXZlLWJnLW1pbi1zbWFsbC5wbmdgfSBhbHQ9XCJCYWNrZ3JvdW5kXCIgLz5cblx0XHRcdFx0XHQ8aW1nIGNsYXNzPVwidGV4dFwiIHNyYz17YCR7dGhpcy5pbWd9L3BhZ2VzL2ZpdmUvZml2ZS10ZXh0LnN2Z2B9IGFsdD1cIlRleHRcIiAvPlxuXHRcdFx0XHRcdHt0aGlzLmNhcm91c2VsKHRoaXMuc3RhdGUuY2Fyb3VzZWwubWFzdGVkLmlkLCB0aGlzLnN0YXRlLmNhcm91c2VsLm1hc3RlZC5zbGlkZXMsICdzcXVhcmUnKX1cblx0XHRcdFx0XHR7Q1RBQnV0dG9uKCdjdGEtbWFzdGVkJyl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdGNvbnN0IGNvbnRlbnQgPSAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaW50ZXJhY3RpdmUtY29udGVudFwiPlxuXHRcdFx0XHRcdDxoZWFkZXI+XG5cdFx0XHRcdFx0XHQ8aW1nIGNsYXNzPVwibG9nb1wiIHNyYz17YCR7dGhpcy5pbWd9L2hlYWRlci1sb2dvLnBuZ2B9IGFsdD1cIkNsdWIgTWVkXCIgLz5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJsaW5rc1wiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibGluayBwYWdlLWxpbmsgYWN0aXZlIGxpbmstZmlyc3QtcGFnZVwiIG9uQ2xpY2s9eyhlKSA9PiB0aGlzLmhhbmRsZUxpbmtDbGljayhlLCAnZmlyc3QtcGFnZScpfT5cblx0XHRcdFx0XHRcdFx0XHRIb21lXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibGluayBwYWdlLWxpbmsgbGluay1zZWNvbmQtcGFnZVwiIG9uQ2xpY2s9eyhlKSA9PiB0aGlzLmhhbmRsZUxpbmtDbGljayhlLCAnc2Vjb25kLXBhZ2UnKX0+XG5cdFx0XHRcdFx0XHRcdFx0VmlsbGFzICYgQ2hhbGV0c1xuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImxpbmsgcGFnZS1saW5rIGxpbmstdGhpcmQtcGFnZVwiIG9uQ2xpY2s9eyhlKSA9PiB0aGlzLmhhbmRsZUxpbmtDbGljayhlLCAndGhpcmQtcGFnZScpfT5cblx0XHRcdFx0XHRcdFx0XHRSZXNvcnRzXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibGluayBwYWdlLWxpbmsgbGluay1mb3VydGgtcGFnZVwiIG9uQ2xpY2s9eyhlKSA9PiB0aGlzLmhhbmRsZUxpbmtDbGljayhlLCAnZm91cnRoLXBhZ2UnKX0+XG5cdFx0XHRcdFx0XHRcdFx0THV4dXJ5IFNwYWNlc1xuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImxpbmsgcGFnZS1saW5rIGxpbmstZmlmdGgtcGFnZVwiIG9uQ2xpY2s9eyhlKSA9PiB0aGlzLmhhbmRsZUxpbmtDbGljayhlLCAnZmlmdGgtcGFnZScpfT5cblx0XHRcdFx0XHRcdFx0XHQ1LU1hc3RlZCBZYWNodFxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvaGVhZGVyPlxuXHRcdFx0XHRcdDxtYWluPlxuXHRcdFx0XHRcdFx0e3BhZ2VPbmUoKX1cblx0XHRcdFx0XHRcdHtwYWdlVHdvKCl9XG5cdFx0XHRcdFx0XHR7Lyoge3BhZ2VUaHJlZSgpfVxuXHRcdFx0XHRcdFx0e3BhZ2VGb3VyKCl9XG5cdFx0XHRcdFx0XHR7cGFnZUZpdmUoKX0gKi99XG5cdFx0XHRcdFx0PC9tYWluPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdClcblx0XHR9XG5cblx0XHR0aGlzLnZpZGVvU2xvdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG5cdFx0XHR0aGlzLmhhbmRsZUNUQShlLCAnY3RhLWhvbWUnKVxuXHRcdH0pXG5cblx0XHQvLyB0aGlzLnZpZGVvU2xvdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG5cdFx0dGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoY29udGVudCgpKVxuXHRcdHRoaXMucGl4ZWxVcmwoJ2N0YS1ob21lJylcblxuXHRcdC8vIERlbGF5IGxvYWRpbmdcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdGNvbnN0IG1haW4gPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuaW50ZXJhY3RpdmUtY29udGVudCBtYWluJylcblx0XHRcdG1haW4uYXBwZW5kQ2hpbGQocGFnZVRocmVlKCkpXG5cdFx0XHRtYWluLmFwcGVuZENoaWxkKHBhZ2VGb3VyKCkpXG5cdFx0XHRtYWluLmFwcGVuZENoaWxkKHBhZ2VGaXZlKCkpXG5cblx0XHRcdHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2xvYWRlZCcpXG5cblx0XHRcdC8vIC8vIExvYWRlcnNcblx0XHRcdC8vIGNvbnN0IGxvYWRlcnMgPSBbLi4udGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmNhcm91c2VsLWxvYWRlcicpXVxuXG5cdFx0XHQvLyAvLyBDYXJvdXNlbHNcblx0XHRcdC8vIGNvbnN0IGZpZnRoUGFnZSA9IHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5wYWdlLWZpZnRoLXBhZ2UnKVxuXHRcdFx0Ly8gZmlmdGhQYWdlLmFwcGVuZENoaWxkKHRoaXMuY2Fyb3VzZWwodGhpcy5zdGF0ZS5jYXJvdXNlbC5tYXN0ZWQuaWQsIHRoaXMuc3RhdGUuY2Fyb3VzZWwubWFzdGVkLnNsaWRlcywgJ3NxdWFyZScpKVxuXG5cdFx0XHQvLyBjb25zdCBmb3VydGhQYWdlID0gdGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcignLnBhZ2UtZm91cnRoLXBhZ2UnKVxuXHRcdFx0Ly8gZm91cnRoUGFnZS5hcHBlbmRDaGlsZCh0aGlzLmNhcm91c2VsKHRoaXMuc3RhdGUuY2Fyb3VzZWwubHV4dXJ5LmlkLCB0aGlzLnN0YXRlLmNhcm91c2VsLmx1eHVyeS5zbGlkZXMsICdzcXVhcmUnKSlcblxuXHRcdFx0Ly8gY29uc3QgdGhpcmRQYWdlID0gdGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcignLnBhZ2UtdGhpcmQtcGFnZScpXG5cdFx0XHQvLyB0aGlyZFBhZ2UuYXBwZW5kQ2hpbGQodGhpcy5jYXJvdXNlbCh0aGlzLnN0YXRlLmNhcm91c2VsLnJlc29ydHMuaWQsIHRoaXMuc3RhdGUuY2Fyb3VzZWwucmVzb3J0cy5zbGlkZXMsICdmdWxsLXdpZHRoJykpXG5cdFx0fSwgNTAwMClcblx0fVxuXG5cdGhhbmRsZUNUQShlLCBsaW5rTmFtZSkge1xuXHRcdC8vIENhbGwgdGhlIGNsaWNrIGFkIGV2ZW50IG9uIENUQSByZWRpcmVjdGlvbiwgaW1wb3J0YW50IVxuXHRcdHRoaXMudnBhaWQuY2xpY2tBZF8oKVxuXG5cdFx0Ly8gQ2xpY2sgdXJsXG5cdFx0dGhpcy5jbGlja1VybChsaW5rTmFtZSlcblxuXHRcdC8vIENUQVxuXHRcdGNvbnN0IGxpbmsgPSB0aGlzLnBhcmFtcy5jdGFbbGlua05hbWVdXG5cdFx0d2luZG93Lm9wZW4obGluaywgJ19ibGFuaycpXG5cdH1cblxuXHRjbGlja1VybChsaW5rTmFtZSkge1xuXHRcdGNvbnN0IGNsaWVudENsaWNrVXJsID0gdGhpcy5wYXJhbXNbJ2NsaWNrLXVybCddLmNsaWVudFtsaW5rTmFtZV1cblx0XHRjb25zdCB2aWRvb215Q2xpY2tVcmwgPSB0aGlzLnBhcmFtc1snY2xpY2stdXJsJ10udmlkb29teVtsaW5rTmFtZV1cblx0XHRpZiAoY2xpZW50Q2xpY2tVcmwpIHtcblx0XHRcdHRoaXMubWFrZVJlcXVlc3QoY2xpZW50Q2xpY2tVcmwsIGxpbmtOYW1lLCAnY2xpY2stdXJsJylcblx0XHR9XG5cdFx0aWYgKHZpZG9vbXlDbGlja1VybCkge1xuXHRcdFx0dGhpcy5tYWtlUmVxdWVzdCh2aWRvb215Q2xpY2tVcmwsIGxpbmtOYW1lLCAnY2xpY2stdXJsJylcblx0XHR9XG5cdH1cblxuXHRwaXhlbFVybChsaW5rTmFtZSkge1xuXHRcdGNvbnN0IGNsaWVudFBpeGVsVXJsID0gdGhpcy5wYXJhbXNbJ3BpeGVsLXVybCddLmNsaWVudFtsaW5rTmFtZV1cblx0XHRjb25zdCBjbGllbnQyUGl4ZWxVcmwgPSB0aGlzLnBhcmFtc1sncGl4ZWwtdXJsJ10uY2xpZW50MltsaW5rTmFtZV1cblx0XHRjb25zdCB2aWRvb215UGl4ZWxVcmwgPSB0aGlzLnBhcmFtc1sncGl4ZWwtdXJsJ10udmlkb29teVtsaW5rTmFtZV1cblx0XHRpZiAoY2xpZW50UGl4ZWxVcmwpIHtcblx0XHRcdHRoaXMubWFrZVJlcXVlc3QoY2xpZW50UGl4ZWxVcmwsIGxpbmtOYW1lLCAncGl4ZWwtdXJsJylcblx0XHR9XG5cdFx0aWYgKGNsaWVudDJQaXhlbFVybCkge1xuXHRcdFx0dGhpcy5tYWtlUmVxdWVzdChjbGllbnQyUGl4ZWxVcmwsIGxpbmtOYW1lLCAncGl4ZWwtdXJsJylcblx0XHR9XG5cdFx0aWYgKHZpZG9vbXlQaXhlbFVybCkge1xuXHRcdFx0dGhpcy5tYWtlUmVxdWVzdCh2aWRvb215UGl4ZWxVcmwsIGxpbmtOYW1lLCAncGl4ZWwtdXJsJylcblx0XHR9XG5cdH1cblxuXHRtYWtlUmVxdWVzdCh1cmwsIGxpbmtOYW1lLCB0eXBlKSB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHtcblx0XHRcdG1ldGhvZDogJ0dFVCcsXG5cdFx0XHRtb2RlOiAnbm8tY29ycydcblx0XHR9XG5cdFx0ZmV0Y2godXJsLCBvcHRpb25zKVxuXHRcdFx0LnRoZW4oKHJlcykgPT4ge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhgc3VjY2VzczogXCIke2xpbmtOYW1lfVwiLCAke3R5cGV9OmAsIHVybClcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0XHQvLyBjb25zb2xlLmVycm9yKGVycilcblx0XHRcdFx0Ly8gY29uc29sZS5lcnJvcihgZmFpbDogXCIke2xpbmtOYW1lfVwiLCAke3R5cGV9OmAsIHVybClcblx0XHRcdH0pXG5cdH1cblxuXHRoYW5kbGVMaW5rQ2xpY2soZSwgbGlua05hbWUpIHtcblx0XHQvLyBJcyBsb2FkZWRcblx0XHRjb25zdCBpc0xvYWRlZCA9IHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucygnbG9hZGVkJylcblx0XHQvLyBjb25zb2xlLmxvZygnaXNMb2FkZWQ6ICcsIGlzTG9hZGVkKVxuXHRcdGlmICghaXNMb2FkZWQgJiYgKGxpbmtOYW1lID09PSAndGhpcmQtcGFnZScgfHwgbGlua05hbWUgPT09ICdmb3VydGgtcGFnZScgfHwgbGlua05hbWUgPT09ICdmaWZ0aC1wYWdlJykpIHJldHVyblxuXHRcdC8vIExpbmtzXG5cdFx0Y29uc3QgbGlua3MgPSBbLi4udGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmxpbmtzIC5saW5rJyldXG5cdFx0bGlua3MuZm9yRWFjaCgobCkgPT4gbC5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKSlcblx0XHRjb25zdCBjbGlja2VkTGluayA9IHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYC5saW5rLSR7bGlua05hbWV9YClcblx0XHRjbGlja2VkTGluay5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKVxuXHRcdC8vIFBhZ2VzXG5cdFx0Y29uc3QgcGFnZXMgPSBbLi4udGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnbWFpbiAucGFnZScpXVxuXHRcdGNvbnN0IGNsaWNrZWRQYWdlID0gdGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcihgLnBhZ2UtJHtsaW5rTmFtZX1gKVxuXHRcdHBhZ2VzLmZvckVhY2goKHApID0+IHAuY2xhc3NMaXN0LnJlbW92ZSgnY3VycmVudC1wYWdlJykpXG5cdFx0aWYgKGNsaWNrZWRQYWdlKSB7XG5cdFx0XHRjbGlja2VkUGFnZS5jbGFzc0xpc3QuYWRkKCdjdXJyZW50LXBhZ2UnKVxuXHRcdH1cblxuXHRcdHRoaXMudmlkZW9TbG90LnN0eWxlLnRyYW5zaXRpb24gPSAnbm9uZSdcblxuXHRcdGlmIChsaW5rTmFtZSA9PT0gJ2ZpcnN0LXBhZ2UnKSB7XG5cdFx0XHR0aGlzLnBpeGVsVXJsKCdjdGEtaG9tZScpXG5cdFx0XHR0aGlzLnZpZGVvU2xvdC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuXHRcdFx0dGhpcy52cGFpZC5yZXN1bWVBZCgpXG5cdFx0fSBlbHNlIGlmIChsaW5rTmFtZSA9PT0gJ3NlY29uZC1wYWdlJykge1xuXHRcdFx0dGhpcy5waXhlbFVybCgnY3RhLXZpbGxhcycpXG5cdFx0XHR0aGlzLnZpZGVvU2xvdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG5cdFx0XHRpZiAoIXRoaXMuc3RhdGUuY2Fyb3VzZWwudmlsbGFzLm1vdW50ZWQpIHtcblx0XHRcdFx0dGhpcy5zdGF0ZS5jYXJvdXNlbC52aWxsYXMubW91bnRlZCA9IHRoaXMubW91bnRTcXVhcmVDYXJvdXNlbCh0aGlzLnN0YXRlLmNhcm91c2VsLnZpbGxhcy5pZCwgdGhpcy5zdGF0ZS5jYXJvdXNlbC52aWxsYXMuc2xpZGVzKVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAobGlua05hbWUgPT09ICd0aGlyZC1wYWdlJykge1xuXHRcdFx0dGhpcy5waXhlbFVybCgnY3RhLXJlc29ydHMnKVxuXHRcdFx0dGhpcy52aWRlb1Nsb3Quc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuXHRcdFx0dGhpcy52cGFpZC5wYXVzZUFkKClcblx0XHRcdGlmICghdGhpcy5zdGF0ZS5jYXJvdXNlbC5yZXNvcnRzLm1vdW50ZWQpIHtcblx0XHRcdFx0dGhpcy5zdGF0ZS5jYXJvdXNlbC5yZXNvcnRzLm1vdW50ZWQgPSB0aGlzLm1vdW50RnVsbFdpZHRoQ2Fyb3VzZWwodGhpcy5zdGF0ZS5jYXJvdXNlbC5yZXNvcnRzLmlkLCB0aGlzLnN0YXRlLmNhcm91c2VsLmx1eHVyeS5zbGlkZXMpXG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChsaW5rTmFtZSA9PT0gJ2ZvdXJ0aC1wYWdlJykge1xuXHRcdFx0dGhpcy5waXhlbFVybCgnY3RhLWx1eHVyeScpXG5cdFx0XHR0aGlzLnZpZGVvU2xvdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG5cdFx0XHR0aGlzLnZwYWlkLnBhdXNlQWQoKVxuXHRcdFx0aWYgKCF0aGlzLnN0YXRlLmNhcm91c2VsLmx1eHVyeS5tb3VudGVkKSB7XG5cdFx0XHRcdHRoaXMuc3RhdGUuY2Fyb3VzZWwubHV4dXJ5Lm1vdW50ZWQgPSB0aGlzLm1vdW50U3F1YXJlQ2Fyb3VzZWwodGhpcy5zdGF0ZS5jYXJvdXNlbC5sdXh1cnkuaWQsIHRoaXMuc3RhdGUuY2Fyb3VzZWwubHV4dXJ5LnNsaWRlcylcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGxpbmtOYW1lID09PSAnZmlmdGgtcGFnZScpIHtcblx0XHRcdHRoaXMucGl4ZWxVcmwoJ2N0YS1tYXN0ZWQnKVxuXHRcdFx0dGhpcy52aWRlb1Nsb3Quc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuXHRcdFx0dGhpcy52cGFpZC5wYXVzZUFkKClcblx0XHRcdGlmICghdGhpcy5zdGF0ZS5jYXJvdXNlbC5tYXN0ZWQubW91bnRlZCkge1xuXHRcdFx0XHR0aGlzLnN0YXRlLmNhcm91c2VsLm1hc3RlZC5tb3VudGVkID0gdGhpcy5tb3VudFNxdWFyZUNhcm91c2VsKHRoaXMuc3RhdGUuY2Fyb3VzZWwubWFzdGVkLmlkLCB0aGlzLnN0YXRlLmNhcm91c2VsLm1hc3RlZC5zbGlkZXMpXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0bW91bnRTcXVhcmVDYXJvdXNlbChpZCwgc2xpZGVzKSB7XG5cdFx0Y29uc3QgY2Fyb3VzZWxDb250YWluZXIgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjY2Fyb3VzZWwtJHtpZH1gKVxuXHRcdGlmICghY2Fyb3VzZWxDb250YWluZXIpIHJldHVyblxuXHRcdGNvbnN0IGNvbmZpZyA9IHtcblx0XHRcdHR5cGU6ICdjYXJvdXNlbCcsXG5cdFx0XHQvLyBmb2N1c0F0OiBpZCA9PT0gJ2hvbWUnID8gJ2NlbnRlcicgOiBudWxsLFxuXHRcdFx0Ly8gcGVyVmlldzogaWQgPT09ICdob21lJyA/IDMgOiAxLFxuXHRcdFx0Ly8gc3RhcnRBdDogMSxcblx0XHRcdGluZmluaXRlOiBmYWxzZSxcblx0XHRcdGFuaW1hdGlvbkR1cmF0aW9uOiA0MDAsXG5cdFx0XHRyZXdpbmREdXJhdGlvbjogMCxcblx0XHRcdGdhcDogMFxuXHRcdFx0Ly8gcGVlazoge1xuXHRcdFx0Ly8gXHRiZWZvcmU6IDAsXG5cdFx0XHQvLyBcdGFmdGVyOiA1MFxuXHRcdFx0Ly8gfVxuXHRcdH1cblx0XHRjb25zdCBnbGlkZSA9IG5ldyBHbGlkZShjYXJvdXNlbENvbnRhaW5lciwgY29uZmlnKVxuXHRcdGdsaWRlLm9uKCdydW4uYWZ0ZXInLCAoZSkgPT4ge1xuXHRcdFx0Y29uc3QgaW5kZXggPSBOdW1iZXIoZ2xpZGUuaW5kZXgpXG5cdFx0XHRjb25zdCByaWdodEFycm93ID0gY2Fyb3VzZWxDb250YWluZXIucXVlcnlTZWxlY3RvcignYnV0dG9uLmdsaWRlX19hcnJvdy0tcmlnaHQnKVxuXHRcdFx0Y29uc3QgbGVmdEFycm93ID0gY2Fyb3VzZWxDb250YWluZXIucXVlcnlTZWxlY3RvcignYnV0dG9uLmdsaWRlX19hcnJvdy0tbGVmdCcpXG5cdFx0XHQvLyBIaWRlIHJpZ2h0IGFycm93XG5cdFx0XHRpZiAoaW5kZXggPT09IHNsaWRlcy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdHJpZ2h0QXJyb3cuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuXHRcdFx0XHRsZWZ0QXJyb3cuc3R5bGUuZGlzcGxheSA9ICdibG9jaydcblx0XHRcdH0gZWxzZSBpZiAoaW5kZXggPT09IDApIHtcblx0XHRcdFx0bGVmdEFycm93LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcblx0XHRcdFx0cmlnaHRBcnJvdy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmlnaHRBcnJvdy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuXHRcdFx0XHRsZWZ0QXJyb3cuc3R5bGUuZGlzcGxheSA9ICdibG9jaydcblx0XHRcdH1cblx0XHRcdC8vIEN1cnJlbnQgaW5kZXhcblx0XHRcdHRoaXMuc3RhdGUuY2Fyb3VzZWxbaWRdLmN1cnJlbnRJbmRleCA9IGluZGV4XG5cdFx0XHQvLyBQaXhlbHNcblx0XHRcdGlmIChpZCA9PT0gdGhpcy5zdGF0ZS5jYXJvdXNlbC5sdXh1cnkuaWQpIHtcblx0XHRcdFx0Y29uc3Qgc2xpZGUgPSB0aGlzLnN0YXRlLmNhcm91c2VsLmx1eHVyeS5zbGlkZXMuZmluZCgoc2xpZGUpID0+IHNsaWRlLmluZGV4ID09PSBpbmRleClcblx0XHRcdFx0dGhpcy5waXhlbFVybChzbGlkZS5jdGEpXG5cdFx0XHR9XG5cblx0XHRcdC8vIC8vIEFjdGl2ZSBkb3Rcblx0XHRcdC8vIHRoaXMuc2VsZWN0SG9tZURvdChpbmRleClcblx0XHR9KVxuXHRcdGdsaWRlLm9uKCdtb3VudC5hZnRlcicsIChlKSA9PiB7XG5cdFx0XHQvLyBQaXhlbHNcblx0XHRcdGlmIChpZCA9PT0gdGhpcy5zdGF0ZS5jYXJvdXNlbC5sdXh1cnkuaWQpIHtcblx0XHRcdFx0Y29uc3Qgc2xpZGUgPSB0aGlzLnN0YXRlLmNhcm91c2VsLmx1eHVyeS5zbGlkZXMuZmluZCgoc2xpZGUpID0+IHNsaWRlLmluZGV4ID09PSAwKVxuXHRcdFx0XHR0aGlzLnBpeGVsVXJsKHNsaWRlLmN0YSlcblx0XHRcdH1cblx0XHR9KVxuXG5cdFx0Z2xpZGUubW91bnQoeyBDb250cm9scywgQnJlYWtwb2ludHMsIFN3aXBlIH0pXG5cdFx0cmV0dXJuIGdsaWRlXG5cdH1cblxuXHRtb3VudEZ1bGxXaWR0aENhcm91c2VsKGlkKSB7XG5cdFx0Y29uc3QgY2Fyb3VzZWxDb250YWluZXIgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjY2Fyb3VzZWwtJHtpZH1gKVxuXHRcdGlmICghY2Fyb3VzZWxDb250YWluZXIpIHJldHVyblxuXHRcdGNvbnN0IGNvbmZpZyA9IHtcblx0XHRcdHR5cGU6ICdjYXJvdXNlbCcsXG5cdFx0XHRmb2N1c0F0OiAnY2VudGVyJyxcblx0XHRcdHBlclZpZXc6IDMsXG5cdFx0XHQvLyBzdGFydEF0OiAxLFxuXHRcdFx0YW5pbWF0aW9uRHVyYXRpb246IDQwMCxcblx0XHRcdHJld2luZER1cmF0aW9uOiAwLFxuXHRcdFx0Z2FwOiAzXG5cdFx0XHQvLyBwZWVrOiB7XG5cdFx0XHQvLyBcdGJlZm9yZTogMCxcblx0XHRcdC8vIFx0YWZ0ZXI6IDUwXG5cdFx0XHQvLyB9XG5cdFx0fVxuXHRcdGNvbnN0IGdsaWRlID0gbmV3IEdsaWRlKGNhcm91c2VsQ29udGFpbmVyLCBjb25maWcpXG5cdFx0Z2xpZGUubW91bnQoeyBDb250cm9scywgQnJlYWtwb2ludHMsIFN3aXBlIH0pXG5cdFx0cmV0dXJuIGdsaWRlXG5cdH1cblxuXHRjYXJvdXNlbChpZCwgc2xpZGVzLCBzaGFwZSkge1xuXHRcdC8vIHNoYXBlID0gJ3NxdWFyZScsICdmdWxsLXdpZHRoJ1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2IGlkPXtgY2Fyb3VzZWwtJHtpZH1gfSBjbGFzcz17YGNhcm91c2VsLWNvbnRhaW5lciAke3NoYXBlfS1jYXJvdXNlbGB9PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZ2xpZGVfX3RyYWNrXCIgZGF0YS1nbGlkZS1lbD1cInRyYWNrXCI+XG5cdFx0XHRcdFx0PHVsIGNsYXNzPVwiZ2xpZGVfX3NsaWRlc1wiPlxuXHRcdFx0XHRcdFx0e3NsaWRlcy5tYXAoKHNsaWRlKSA9PiAoXG5cdFx0XHRcdFx0XHRcdDxsaSBjbGFzcz1cImdsaWRlX19zbGlkZVwiIG9uQ2xpY2s9eyhlKSA9PiB0aGlzLmhhbmRsZUNUQShlLCBzbGlkZS5jdGEpfT5cblx0XHRcdFx0XHRcdFx0XHQ8aW1nIHNyYz17c2xpZGUuc3JjfSBhbHQ9XCJTbGlkZSAxXCIgLz5cblx0XHRcdFx0XHRcdFx0PC9saT5cblx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdDwvdWw+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJnbGlkZV9fYXJyb3dzXCIgZGF0YS1nbGlkZS1lbD1cImNvbnRyb2xzXCI+XG5cdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRjbGFzcz1cImdsaWRlX19hcnJvdyBnbGlkZV9fYXJyb3ctLWxlZnRcIlxuXHRcdFx0XHRcdFx0ZGF0YS1nbGlkZS1kaXI9XCI8XCJcblx0XHRcdFx0XHRcdHN0eWxlPXtgZGlzcGxheTogJHtzaGFwZSA9PT0gJ3NxdWFyZScgPyAnbm9uZScgOiAnYmxvY2snfTtgfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxpbWcgc3JjPXtgJHt0aGlzLnBhcmFtcy5jYXJvdXNlbEFzc2V0c30vYXJyb3dzL2xlZnQuc3ZnYH0gYWx0PVwiTGVmdFwiIC8+XG5cdFx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdFx0ey8qIDxkaXYgY2xhc3M9XCJkb3QtYnV0dG9uXCIgZGF0YS1pbmRleD17MH0gb25DbGljaz17KGUpID0+IHRoaXMuaGFuZGxlQ2Fyb3VzZWxPZmZlcnNEb3RDbGljayhlKX0+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZG90IGFjdGl2ZVwiPjwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkb3QtYnV0dG9uXCIgZGF0YS1pbmRleD17MX0gb25DbGljaz17KGUpID0+IHRoaXMuaGFuZGxlQ2Fyb3VzZWxPZmZlcnNEb3RDbGljayhlKX0+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZG90XCI+PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImRvdC1idXR0b25cIiBkYXRhLWluZGV4PXsyfSBvbkNsaWNrPXsoZSkgPT4gdGhpcy5oYW5kbGVDYXJvdXNlbE9mZmVyc0RvdENsaWNrKGUpfT5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkb3RcIj48L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZG90LWJ1dHRvblwiIGRhdGEtaW5kZXg9ezN9IG9uQ2xpY2s9eyhlKSA9PiB0aGlzLmhhbmRsZUNhcm91c2VsT2ZmZXJzRG90Q2xpY2soZSl9PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImRvdFwiPjwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PiAqL31cblx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImdsaWRlX19hcnJvdyBnbGlkZV9fYXJyb3ctLXJpZ2h0XCIgZGF0YS1nbGlkZS1kaXI9XCI+XCI+XG5cdFx0XHRcdFx0XHQ8aW1nIHNyYz17YCR7dGhpcy5wYXJhbXMuY2Fyb3VzZWxBc3NldHN9L2Fycm93cy9yaWdodC5zdmdgfSBhbHQ9XCJSaWdodFwiIC8+XG5cdFx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9XG5cblx0Ly8gaGFuZGxlQ2Fyb3VzZWxPZmZlcnNEb3RDbGljayhlKSB7XG5cdC8vIFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXHQvLyBcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcblx0Ly8gXHRjb25zdCBlbCA9IGUudGFyZ2V0XG5cdC8vIFx0Ly8gQ2Fyb3VzZWxcblx0Ly8gXHRjb25zdCBpbmRleCA9IE51bWJlcihlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5kZXgnKSlcblx0Ly8gXHR0aGlzLnN0YXRlLmNhcm91c2VsLm9mZmVycy5tb3VudGVkLmdvKGA9JHtpbmRleH1gKVxuXHQvLyBcdC8vIEFjdGl2ZSBkb3Rcblx0Ly8gXHR0aGlzLnNlbGVjdE9mZmVyc0RvdChpbmRleClcblx0Ly8gfVxuXG5cdC8vIHNlbGVjdE9mZmVyc0RvdChpbmRleCkge1xuXHQvLyBcdGNvbnN0IGNsaWNrZWREb3QgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjY2Fyb3VzZWwtJHt0aGlzLnN0YXRlLmNhcm91c2VsLm9mZmVycy5pZH0gW2RhdGEtaW5kZXg9XCIke2luZGV4fVwiXWApXG5cdC8vIFx0Y29uc3QgZG90cyA9IFsuLi50aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcjY2Fyb3VzZWwtb2ZmZXJzIC5kb3QnKV1cblx0Ly8gXHRkb3RzLmZvckVhY2goKGQpID0+IGQuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJykpXG5cdC8vIFx0Y2xpY2tlZERvdC5maXJzdENoaWxkLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpXG5cdC8vIH1cbn1cbiIsImltcG9ydCBWcGFpZFZpZGVvUGxheWVyIGZyb20gJy4vdnBhaWQuanMnXG5pbXBvcnQgQ3JlYXRpdmVEZXNrdG9wIGZyb20gJy4vYWQvZGVza3RvcC9kZXNrdG9wLmpzJ1xuLy8gV2lwZXJcbi8vIGltcG9ydCBDcmVhdGl2ZURlc2t0b3AgZnJvbSAnLi9hZC93aXBlci93aXBlci5qcydcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuXHRyZXR1cm4gbmV3IFZwYWlkVmlkZW9QbGF5ZXIoQ3JlYXRpdmVEZXNrdG9wKVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///969\n")},646:(module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(15);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(645);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, "*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}.creative-container{position:absolute;top:0;left:0;width:100%;height:100%}.creative-container button.cta-button{position:absolute;z-index:1;display:flex;justify-content:center;align-items:center;color:#fff;font-family:\\"HappinessVRegular\\",sans-serif;font-size:18px;border:none;background:transparent;cursor:pointer;transition:all 120ms ease-in-out;border-radius:3px}.creative-container button.cta-button:hover{transform:scale(1.1);box-shadow:rgba(255,255,255,.5) 0px 2px 8px 0px}.creative-container button.cta-button:hover img{transform:scale(1.3);-webkit-animation:customPulsate 2s linear infinite;animation:customPulsate 2s linear infinite}.creative-container button.cta-button>div.text{height:100%;display:flex;justify-content:center;align-items:center;padding:12px 20px;background-color:#0e356e;border-top-left-radius:5px;border-bottom-left-radius:5px}.creative-container button.cta-button>div.icon-wrapper{height:42px;display:flex;justify-content:center;align-items:center;padding:0px 14px;background-color:#092e63;border-top-right-radius:5px;border-bottom-right-radius:5px}.creative-container button.cta-button>div.icon-wrapper img{height:14px;display:block;transition:all 120ms ease-in-out}.creative-container video.ad-video{background-color:transparent !important}.interactive-content{width:100%;height:100%}.interactive-content header{position:relative;width:100%;height:65px;display:flex;justify-content:space-between;align-items:center;padding:10px 0px 10px 25px;background-color:#0e356e;z-index:1}.interactive-content header img.logo{width:auto;height:calc(65px - 14px)}.interactive-content header div.links{width:82%;margin-left:40px;padding-right:10px;display:flex;justify-content:space-between;align-items:center;font-size:16px}.interactive-content header div.links .link{display:flex;justify-content:center;align-items:center;height:65px;padding:0px;font-family:\\"HappinessVRegular\\",sans-serif;font-size:14px;color:#fff;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.interactive-content header div.links .link.page-link img{height:16px}.interactive-content header div.links .link img{width:auto;height:18px;pointer-events:none !important}.interactive-content header div.links .link.active{color:#73adfc}.interactive-content header div.links .cta-link{background-color:#0e356e;padding:0 30px;transform:scale(1)}.interactive-content header div.links .cta-link img{transition:transform 200ms ease-in-out}.interactive-content header div.links .cta-link:hover img{transform:scale(1.2)}.interactive-content main{width:100%;height:calc(360px - 65px)}.interactive-content .page{position:relative;display:none;width:100%;height:100%;background-color:#0e356e}.interactive-content .page.current-page{display:block}.interactive-content .page img.page-background{position:absolute;left:0;bottom:0;width:100%;height:auto}.interactive-content .page-first-page button.cta-button{left:400px;bottom:25px}.interactive-content .page-first-page img.luxury{width:220px;position:absolute;left:86px;bottom:14px}.interactive-content .page-second-page button.cta-button{left:30px;bottom:26px}.interactive-content .page-second-page img.text{position:relative;left:30px;top:30px;width:260px}.interactive-content .page-third-page button.cta-button{bottom:10px;left:220px}.interactive-content .page-fourth-page img.text{position:relative;left:30px;top:30px;width:250px}.interactive-content .page-fourth-page button.cta-button{bottom:40px;left:30px}.interactive-content .page-fifth-page img.text{position:relative;left:30px;top:20px;width:250px}.interactive-content .page-fifth-page button.cta-button{bottom:13px;left:30px}.square-carousel{position:absolute;top:20px;right:25px;width:260px;height:260px;overflow:hidden;margin:0 auto}.square-carousel ul.glide__slides{display:flex;list-style:none}.square-carousel li.glide__slide{position:relative;cursor:pointer}.square-carousel li.glide__slide:hover img.slide-img{filter:contrast(120%)}.square-carousel li.glide__slide:hover img.slide-title{transform:scale(1.2)}.square-carousel img{display:block;height:auto;width:100%;margin:auto;z-index:1;transition:all 200ms ease-in-out;pointer-events:none !important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.square-carousel img:hover{filter:contrast(120%)}.square-carousel .glide__arrows{position:absolute;left:40px;bottom:15px;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;height:50px;display:flex;justify-content:center;align-items:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.square-carousel .glide__arrows .glide__arrows-container{position:relative;width:100%;height:100%;display:flex;justify-content:center;align-items:center}.square-carousel .glide__arrows button.glide__arrow{display:flex;justify-content:center;align-items:center;z-index:99;background:rgba(0,0,0,0);border:none;height:30px;width:30px;padding:6px;transition:transform 120ms ease-in-out;border-radius:0;background-color:rgba(255,255,255,.8)}.square-carousel .glide__arrows button.glide__arrow img{height:100%;margin:0}.square-carousel .glide__arrows button.glide__arrow:hover{cursor:pointer;transform:scale(1.1)}.square-carousel .glide__arrows button.glide__arrow--left{position:absolute;top:-78px;left:-20px}.square-carousel .glide__arrows button.glide__arrow--right{position:absolute;top:-78px;right:-210px}.square-carousel .glide__arrows div.dot-button{padding:10px;cursor:pointer}.square-carousel .glide__arrows div.dot-button div.dot{box-shadow:0 4px 5px -2px #868686;width:10px;height:10px;border-radius:50%;background-color:rgba(255,255,255,.5);pointer-events:none}.square-carousel .glide__arrows div.dot-button div.dot.active{background-color:#fff}.full-width-carousel{display:flex;align-items:center;position:absolute;top:3px;left:-20px;width:660px;height:240px;overflow:hidden;margin:0 auto}.full-width-carousel ul.glide__slides{display:flex;list-style:none}.full-width-carousel li.glide__slide{position:relative;cursor:pointer}.full-width-carousel li.glide__slide:hover img{filter:contrast(120%)}.full-width-carousel li.glide__slide.glide__slide--active{transform:scale(1.62);margin:0 70px !important;border:2px solid #fff}.full-width-carousel img{display:block;height:auto;width:100%;margin:auto;z-index:1;pointer-events:none !important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.full-width-carousel img:hover{filter:contrast(120%)}.full-width-carousel .glide__arrows{position:absolute;left:40px;bottom:15px;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;height:50px;display:flex;justify-content:center;align-items:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.full-width-carousel .glide__arrows .glide__arrows-container{position:relative;width:100%;height:100%;display:flex;justify-content:center;align-items:center}.full-width-carousel .glide__arrows button.glide__arrow{display:flex;justify-content:center;align-items:center;z-index:99;background:rgba(0,0,0,0);border:none;height:30px;width:30px;padding:6px;transition:transform 120ms ease-in-out;border-radius:0;background-color:rgba(255,255,255,.8)}.full-width-carousel .glide__arrows button.glide__arrow img{height:100%;margin:0}.full-width-carousel .glide__arrows button.glide__arrow:hover{cursor:pointer;transform:scale(1.1)}.full-width-carousel .glide__arrows button.glide__arrow--left{position:absolute;top:-68px;left:0px}.full-width-carousel .glide__arrows button.glide__arrow--right{position:absolute;top:-68px;right:-600px}.full-width-carousel .glide__arrows div.dot-button{padding:10px;cursor:pointer}.full-width-carousel .glide__arrows div.dot-button div.dot{box-shadow:0 4px 5px -2px #868686;width:10px;height:10px;border-radius:50%;background-color:rgba(255,255,255,.5);pointer-events:none}.full-width-carousel .glide__arrows div.dot-button div.dot.active{background-color:#fff}@-webkit-keyframes customPulsate{0%{transform:scale(1)}50%{transform:scale(1.4)}100%{transform:scale(1)}}", "",{"version":3,"sources":["webpack://./src/ad/desktop/desktop.scss"],"names":[],"mappings":"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","sourcesContent":["$header-height: 65px;\\n\\n$color-blue: #0E356E;\\n$color-blue-dark: #092E63;\\n$color-link-active: #73ADFC;\\n\\n$font-genbas: \'GenBasRRegular\', sans-serif;\\n$font-happiness: \'HappinessVRegular\', sans-serif;\\n\\n\\n*,\\n*::before,\\n*::after {\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\tbox-sizing: border-box;\\n}\\n\\n.creative-container {\\n position: absolute;\\n top: 0;\\n\\tleft: 0;\\n width: 100%;\\n height: 100%;\\n // background-color: #fff;\\n\\n\\n\\tbutton.cta-button {\\n\\t\\tposition: absolute;\\n\\t\\tz-index: 1;\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: center;\\n\\t\\talign-items: center;\\n\\t\\tcolor: #fff;\\n\\t\\tfont-family: $font-happiness;\\n\\t\\tfont-size: 18px;\\n\\t\\tborder: none;\\n\\t\\tbackground: transparent;\\n\\t\\tcursor: pointer;\\n\\t\\ttransition: all 120ms ease-in-out;\\n\\t\\tborder-radius: 3px;\\n\\t\\t&:hover {\\n\\t\\t\\ttransform: scale(1.1);\\n\\t\\t\\tbox-shadow: rgba(255, 255, 255, 0.5) 0px 2px 8px 0px;\\n\\t\\t}\\n\\t\\t&:hover img {\\n\\t\\t\\ttransform: scale(1.3);\\n\\t\\t\\tanimation: customPulsate 2s linear infinite;\\n\\t\\t}\\n\\t\\t& > div.text {\\n\\t\\t\\theight: 100%;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tjustify-content: center;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\tpadding: 12px 20px;\\n\\t\\t\\tbackground-color: $color-blue;\\n\\t\\t\\tborder-top-left-radius: 5px;\\n\\t\\t\\tborder-bottom-left-radius: 5px;\\n\\t\\t}\\n\\t\\t& > div.icon-wrapper {\\n\\t\\t\\theight: 42px;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tjustify-content: center;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\tpadding: 0px 14px;\\n\\t\\t\\tbackground-color: $color-blue-dark;\\n\\t\\t\\tborder-top-right-radius: 5px;\\n\\t\\t\\tborder-bottom-right-radius: 5px;\\n\\t\\t\\timg {\\n\\t\\t\\t\\theight: 14px;\\n\\t\\t\\t\\tdisplay: block;\\n\\t\\t\\t\\ttransition: all 120ms ease-in-out;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\tvideo.ad-video {\\n\\t\\tbackground-color: transparent !important;\\n\\t\\t// border: 1px solid red;\\n\\t}\\n}\\n\\n\\n/**\\n * Content\\n */\\n.interactive-content {\\n\\twidth: 100%;\\n\\theight: 100%;\\n\\n\\theader {\\n\\t\\tposition: relative;\\n\\t\\twidth: 100%;\\n\\t\\theight: $header-height;\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: space-between;\\n\\t\\talign-items: center;\\n\\t\\tpadding: 10px 0px 10px 25px;\\n\\t\\tbackground-color: $color-blue;\\n\\t\\tz-index: 1;\\n\\n\\t\\timg.logo {\\n\\t\\t\\twidth: auto;\\n\\t\\t\\theight: calc(#{$header-height} - 14px);\\n\\t\\t}\\n\\t\\tdiv.links {\\n\\t\\t\\twidth: 82%;\\n\\t\\t\\tmargin-left: 40px;\\n\\t\\t\\tpadding-right: 10px;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tjustify-content: space-between;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\tfont-size: 16px;\\n\\n\\t\\t\\t.link {\\n\\t\\t\\t\\tdisplay: flex;\\n\\t\\t\\t\\tjustify-content: center;\\n\\t\\t\\t\\talign-items: center;\\n\\t\\t\\t\\theight: $header-height;\\n\\t\\t\\t\\tpadding: 0px;\\n\\t\\t\\t\\tfont-family: $font-happiness;\\n\\t\\t\\t\\tfont-size: 14px;\\n\\t\\t\\t\\tcolor: #fff;\\n\\t\\t\\t\\tcursor: pointer;\\n\\t\\t\\t\\tuser-select: none;\\n\\t\\t\\t\\t// transition: border 120ms ease-in-out;\\n\\t\\t\\t\\t&.page-link img {\\n\\t\\t\\t\\t\\theight: 16px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\timg {\\n\\t\\t\\t\\t\\twidth: auto;\\n\\t\\t\\t\\t\\theight: 18px;\\n\\t\\t\\t\\t\\tpointer-events: none !important;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t&.active {\\n\\t\\t\\t\\t\\tcolor: $color-link-active;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t.cta-link {\\n\\t\\t\\t\\tbackground-color: $color-blue;\\n\\t\\t\\t\\tpadding: 0 30px;\\n\\t\\t\\t\\ttransform: scale(1);\\n\\t\\t\\t\\timg {\\n\\t\\t\\t\\t\\ttransition: transform 200ms ease-in-out;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t&:hover img {\\n\\t\\t\\t\\t\\ttransform: scale(1.2);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\tmain {\\n\\t\\twidth: 100%;\\n\\t\\theight: calc(360px - #{$header-height});\\n\\t\\t// border: 1px solid blue;\\n\\t}\\n\\n\\t.page {\\n\\t\\tposition: relative;\\n\\t\\tdisplay: none;\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\t\\tbackground-color: $color-blue;\\n\\t\\t&.current-page {\\n\\t\\t\\tdisplay: block;\\n\\t\\t}\\n\\n\\t\\timg.page-background {\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\tleft: 0;\\n\\t\\t\\tbottom: 0;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\theight: auto;\\n\\t\\t}\\n\\n\\t\\t&-first-page {\\n\\t\\t\\tbutton.cta-button {\\n\\t\\t\\t\\tleft: 400px;\\n\\t\\t\\t\\tbottom: 25px;\\n\\t\\t\\t}\\n\\t\\t\\timg.luxury {\\n\\t\\t\\t\\twidth: 220px;\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\tleft: 86px;\\n\\t\\t\\t\\tbottom: 14px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&-second-page {\\n\\t\\t\\tbutton.cta-button {\\n\\t\\t\\t\\tleft: 30px;\\n\\t\\t\\t\\tbottom: 26px;\\n\\t\\t\\t}\\n\\t\\t\\timg.text {\\n\\t\\t\\t\\tposition: relative;\\n\\t\\t\\t\\tleft: 30px;\\n\\t\\t\\t\\ttop: 30px;\\n\\t\\t\\t\\twidth: 260px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&-third-page {\\n\\t\\t\\tbutton.cta-button {\\n\\t\\t\\t\\tbottom: 10px;\\n\\t\\t\\t\\tleft: 220px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&-fourth-page {\\n\\t\\t\\timg.text {\\n\\t\\t\\t\\tposition: relative;\\n\\t\\t\\t\\tleft: 30px;\\n\\t\\t\\t\\ttop: 30px;\\n\\t\\t\\t\\twidth: 250px;\\n\\t\\t\\t}\\n\\t\\t\\tbutton.cta-button {\\n\\t\\t\\t\\tbottom: 40px;\\n\\t\\t\\t\\tleft: 30px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&-fifth-page {\\n\\t\\t\\timg.text {\\n\\t\\t\\t\\tposition: relative;\\n\\t\\t\\t\\tleft: 30px;\\n\\t\\t\\t\\ttop: 20px;\\n\\t\\t\\t\\twidth: 250px;\\n\\t\\t\\t}\\n\\t\\t\\tbutton.cta-button {\\n\\t\\t\\t\\tbottom: 13px;\\n\\t\\t\\t\\tleft: 30px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\n\\n\\n/* START - Carousel Square */ \\n.square-carousel {\\n\\tposition: absolute;\\n\\ttop: 20px;\\n\\tright: 25px;\\n\\twidth: 260px;\\n\\theight: 260px;\\n\\toverflow: hidden;\\n\\tmargin: 0 auto;\\n\\n\\t// .glide__track {}\\n\\n\\tul.glide__slides {\\n\\t\\tdisplay: flex;\\n\\t\\tlist-style: none;\\n\\t}\\n\\n\\tli.glide__slide {\\n\\t\\t// width: 390px;\\n\\t\\t// height: 220px;\\n\\t\\tposition: relative;\\n\\t\\tcursor: pointer;\\n\\t\\t&:hover img.slide-img {\\n\\t\\t\\tfilter: contrast(120%);\\n\\t\\t}\\n\\t\\t&:hover img.slide-title {\\n\\t\\t\\ttransform: scale(1.2);\\n\\t\\t}\\n\\t}\\n\\n\\timg {\\n\\t\\t// position: absolute;\\n\\t\\tdisplay: block;\\n\\t\\theight: auto;\\n\\t\\twidth: 100%;\\n\\t\\tmargin: auto;\\n\\t\\t// max-width: 360px;\\n\\t\\tz-index: 1;\\n\\t\\ttransition: all 200ms ease-in-out;\\n\\t\\tpointer-events: none !important;\\n\\t\\tuser-select: none;\\n\\t\\t&:hover {\\n\\t\\t\\tfilter: contrast(120%);\\n\\t\\t}\\n\\t}\\n\\n\\n\\t.glide__arrows {\\n\\t\\t// position: absolute;\\n\\t\\t// top: 80px;\\n\\t\\t// user-select: none;\\n\\t\\tposition: absolute;\\n\\t\\tleft: 40px;\\n\\t\\tbottom: 15px;\\n\\t\\twidth: fit-content;\\n height: 50px;\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: center;\\n\\t\\talign-items: center;\\n\\t\\tuser-select: none;\\n\\n\\t\\t.glide__arrows-container {\\n\\t\\t\\tposition: relative;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\theight: 100%;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tjustify-content: center;\\n\\t\\t\\talign-items: center;\\n \\t\\t// height: 100%;\\n\\t\\t}\\n\\n\\t\\tbutton.glide__arrow {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tjustify-content: center;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\t// position: absolute;\\n\\t\\t\\tz-index: 99;\\n\\t\\t\\tbackground: rgba(0, 0, 0, 0);\\n\\t\\t\\tborder: none;\\n\\t\\t\\theight: 30px;\\n\\t\\t\\twidth: 30px;\\n\\t\\t\\tpadding: 6px;\\n\\t\\t\\ttransition: transform 120ms ease-in-out;\\n\\t\\t\\tborder-radius: 0;\\n\\t\\t\\tbackground-color: rgba(255, 255, 255, 0.8);\\n\\n\\t\\t\\timg {\\n\\t\\t\\t\\theight: 100%;\\n\\t\\t\\t\\tmargin: 0;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&:hover {\\n\\t\\t\\t\\tcursor: pointer;\\n\\t\\t\\t\\ttransform: scale(1.1);\\n\\t\\t\\t}\\n\\n\\t\\t\\t&--left {\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\ttop: -78px;\\n\\t\\t\\t\\tleft: -20px;\\n\\t\\t\\t\\timg {\\n\\t\\t\\t\\t\\t// position: relative;\\n\\t\\t\\t\\t\\t// right: 2px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\t&--right {\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\ttop: -78px;\\n\\t\\t\\t\\tright: -210px;\\n\\t\\t\\t\\timg {\\n\\t\\t\\t\\t\\t// pointer-events: none;\\n\\t\\t\\t\\t\\t// position: relative;\\n\\t\\t\\t\\t\\t// left: 3px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tdiv.dot-button {\\n\\t\\t\\tpadding: 10px;\\n\\t\\t\\tcursor: pointer;\\n\\n\\t\\t\\tdiv.dot {\\n\\t\\t\\t\\tbox-shadow: 0 4px 5px -2px rgb(134, 134, 134);\\n\\t\\t\\t\\twidth: 10px;\\n\\t\\t\\t\\theight: 10px;\\n\\t\\t\\t\\tborder-radius: 50%;\\n\\t\\t\\t\\tbackground-color: rgba(255, 255, 255, 0.5);\\n\\t\\t\\t\\tpointer-events: none;\\n\\t\\t\\t\\t&.active {\\n\\t\\t\\t\\t\\tbackground-color: rgba(255, 255, 255, 1);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t&:not(:last-child) {\\n\\t\\t\\t\\t\\t// margin-right: 15px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t}\\n}\\n/* END - Carousel Square */\\n\\n\\n\\n/* START - Carousel Full Width */ \\n.full-width-carousel {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tposition: absolute;\\n\\ttop: 3px;\\n\\tleft: -20px;\\n\\twidth: 660px;\\n\\theight: 240px;\\n\\toverflow: hidden;\\n\\tmargin: 0 auto;\\n\\n\\tul.glide__slides {\\n\\t\\tdisplay: flex;\\n\\t\\tlist-style: none;\\n\\t}\\n\\n\\tli.glide__slide {\\n\\t\\tposition: relative;\\n\\t\\tcursor: pointer;\\n\\t\\t&:hover img {\\n\\t\\t\\tfilter: contrast(120%);\\n\\t\\t}\\n\\n\\t\\t&.glide__slide--active {\\n\\t\\t\\ttransform: scale(1.62);\\n\\t\\t\\tmargin: 0 70px !important;\\n\\t\\t\\tborder: 2px solid #fff;\\n\\t\\t}\\n\\t}\\n\\n\\timg {\\n\\t\\tdisplay: block;\\n\\t\\theight: auto;\\n\\t\\twidth: 100%;\\n\\t\\tmargin: auto;\\n\\t\\tz-index: 1;\\n\\t\\tpointer-events: none !important;\\n\\t\\tuser-select: none;\\n\\t\\t&:hover {\\n\\t\\t\\tfilter: contrast(120%);\\n\\t\\t}\\n\\t}\\n\\n\\n\\t.glide__arrows {\\n\\t\\tposition: absolute;\\n\\t\\tleft: 40px;\\n\\t\\tbottom: 15px;\\n\\t\\twidth: fit-content;\\n height: 50px;\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: center;\\n\\t\\talign-items: center;\\n\\t\\tuser-select: none;\\n\\n\\t\\t.glide__arrows-container {\\n\\t\\t\\tposition: relative;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\theight: 100%;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tjustify-content: center;\\n\\t\\t\\talign-items: center;\\n \\t\\t// height: 100%;\\n\\t\\t}\\n\\n\\t\\tbutton.glide__arrow {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tjustify-content: center;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\t// position: absolute;\\n\\t\\t\\tz-index: 99;\\n\\t\\t\\tbackground: rgba(0, 0, 0, 0);\\n\\t\\t\\tborder: none;\\n\\t\\t\\theight: 30px;\\n\\t\\t\\twidth: 30px;\\n\\t\\t\\tpadding: 6px;\\n\\t\\t\\ttransition: transform 120ms ease-in-out;\\n\\t\\t\\tborder-radius: 0;\\n\\t\\t\\tbackground-color: rgba(255, 255, 255, 0.8);\\n\\n\\t\\t\\timg {\\n\\t\\t\\t\\theight: 100%;\\n\\t\\t\\t\\tmargin: 0;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&:hover {\\n\\t\\t\\t\\tcursor: pointer;\\n\\t\\t\\t\\ttransform: scale(1.1);\\n\\t\\t\\t}\\n\\n\\t\\t\\t&--left {\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\ttop: -68px;\\n\\t\\t\\t\\tleft: 0px;\\n\\t\\t\\t\\timg {\\n\\t\\t\\t\\t\\t// position: relative;\\n\\t\\t\\t\\t\\t// right: 2px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\t&--right {\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\ttop: -68px;\\n\\t\\t\\t\\tright: -600px;\\n\\t\\t\\t\\timg {\\n\\t\\t\\t\\t\\t// pointer-events: none;\\n\\t\\t\\t\\t\\t// position: relative;\\n\\t\\t\\t\\t\\t// left: 3px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tdiv.dot-button {\\n\\t\\t\\tpadding: 10px;\\n\\t\\t\\tcursor: pointer;\\n\\n\\t\\t\\tdiv.dot {\\n\\t\\t\\t\\tbox-shadow: 0 4px 5px -2px rgb(134, 134, 134);\\n\\t\\t\\t\\twidth: 10px;\\n\\t\\t\\t\\theight: 10px;\\n\\t\\t\\t\\tborder-radius: 50%;\\n\\t\\t\\t\\tbackground-color: rgba(255, 255, 255, 0.5);\\n\\t\\t\\t\\tpointer-events: none;\\n\\t\\t\\t\\t&.active {\\n\\t\\t\\t\\t\\tbackground-color: rgba(255, 255, 255, 1);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t&:not(:last-child) {\\n\\t\\t\\t\\t\\t// margin-right: 15px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t}\\n}\\n/* END - Carousel Full Width */\\n\\n\\n\\n/* START - SQUARE Carousel */ \\n// #carousel-home {\\n// \\tposition: absolute;\\n// \\tright: 36px;\\n// \\tbottom: 16px;\\n// \\twidth: 360px;\\n// \\theight: 86px;\\n// \\toverflow: hidden;\\n// \\tmargin: 0 auto;\\n// \\t// display: block;\\n// \\tdisplay: flex;\\n// \\talign-items: center;\\n\\n// \\tul.glide__slides {\\n// \\t\\tdisplay: flex;\\n// \\t\\tlist-style: none;\\n// \\t}\\n\\n// \\tli.glide__slide {\\n// \\t\\tposition: relative;\\n// \\t\\tcursor: pointer;\\n// \\t\\t&:hover img.slide-img {\\n// \\t\\t\\tfilter: contrast(120%);\\n// \\t\\t}\\n// \\t\\t&:hover img.slide-title {\\n// \\t\\t\\ttransform: scale(1.2);\\n// \\t\\t}\\n\\n// \\t\\t&.glide__slide--active {\\n// \\t\\t\\t// position: relative;\\n// \\t\\t\\t// transform: scale(1.2);\\n// \\t\\t\\t// margin: 0 15px !important;\\n// \\t\\t}\\n// \\t}\\n\\n// \\timg {\\n// \\t\\t// position: absolute;\\n// \\t\\tdisplay: block;\\n// \\t\\theight: auto;\\n// \\t\\twidth: 100%;\\n// \\t\\tmargin: auto;\\n// \\t\\t// max-width: 360px;\\n// \\t\\tz-index: 1;\\n// \\t\\ttransition: all 200ms ease-in-out;\\n// \\t\\tpointer-events: none !important;\\n// \\t\\tuser-select: none;\\n// \\t\\t&:hover {\\n// \\t\\t\\tfilter: contrast(120%);\\n// \\t\\t}\\n// \\t}\\n\\n\\n// \\t.glide__arrows {\\n// \\t\\t// position: absolute;\\n// \\t\\t// top: 80px;\\n// \\t\\t// user-select: none;\\n// \\t\\tposition: absolute;\\n// \\t\\tleft: 40px;\\n// \\t\\tbottom: 15px;\\n// \\t\\twidth: fit-content;\\n// height: 50px;\\n// \\t\\tdisplay: flex;\\n// \\t\\tjustify-content: center;\\n// \\t\\talign-items: center;\\n// \\t\\tuser-select: none;\\n\\n// \\t\\t.glide__arrows-container {\\n// \\t\\t\\tposition: relative;\\n// \\t\\t\\twidth: 100%;\\n// \\t\\t\\theight: 100%;\\n// \\t\\t\\tdisplay: flex;\\n// \\t\\t\\tjustify-content: center;\\n// \\t\\t\\talign-items: center;\\n// \\t\\t// height: 100%;\\n// \\t\\t}\\n\\n// \\t\\tbutton.glide__arrow {\\n// \\t\\t\\tdisplay: flex;\\n// \\t\\t\\tjustify-content: center;\\n// \\t\\t\\talign-items: center;\\n// \\t\\t\\t// position: absolute;\\n// \\t\\t\\tz-index: 99;\\n// \\t\\t\\tbackground: rgba(255, 255, 255, 1) !important;\\n// \\t\\t\\tborder: none;\\n// \\t\\t\\theight: 36px;\\n// \\t\\t\\twidth: 36px;\\n// \\t\\t\\tpadding: 10px;\\n// \\t\\t\\tborder-radius: 5px !important;\\n// \\t\\t\\ttransition: transform 120ms ease-in-out;\\n\\n// \\t\\t\\timg {\\n// \\t\\t\\t\\theight: 100%;\\n// \\t\\t\\t\\tmargin: 0;\\n// \\t\\t\\t}\\n\\n// \\t\\t\\t&:hover {\\n// \\t\\t\\t\\tcursor: pointer;\\n// \\t\\t\\t\\ttransform: scale(1.1);\\n// \\t\\t\\t}\\n\\n// \\t\\t\\t&--left {\\n// \\t\\t\\t\\tposition: absolute;\\n// \\t\\t\\t\\ttop: 3px;\\n// \\t\\t\\t\\tleft: -40px;\\n// \\t\\t\\t\\timg {\\n// \\t\\t\\t\\t\\t// position: relative;\\n// \\t\\t\\t\\t\\t// right: 2px;\\n// \\t\\t\\t\\t}\\n// \\t\\t\\t}\\n// \\t\\t\\t&--right {\\n// \\t\\t\\t\\tposition: absolute;\\n// \\t\\t\\t\\ttop: 3px;\\n// \\t\\t\\t\\tright: -320px;\\n// \\t\\t\\t\\timg {\\n// \\t\\t\\t\\t\\t// pointer-events: none;\\n// \\t\\t\\t\\t\\t// position: relative;\\n// \\t\\t\\t\\t\\t// left: 3px;\\n// \\t\\t\\t\\t}\\n// \\t\\t\\t}\\n// \\t\\t}\\n\\n// \\t\\tdiv.dot-button {\\n// \\t\\t\\tpadding: 10px;\\n// \\t\\t\\tcursor: pointer;\\n\\n// \\t\\t\\tdiv.dot {\\n// \\t\\t\\t\\tbox-shadow: 0 4px 5px -2px rgb(134, 134, 134);\\n// \\t\\t\\t\\twidth: 10px;\\n// \\t\\t\\t\\theight: 10px;\\n// \\t\\t\\t\\tborder-radius: 50%;\\n// \\t\\t\\t\\tbackground-color: rgba(255, 255, 255, 0.5);\\n// \\t\\t\\t\\tpointer-events: none;\\n// \\t\\t\\t\\t&.active {\\n// \\t\\t\\t\\t\\tbackground-color: rgba(255, 255, 255, 1);\\n// \\t\\t\\t\\t}\\n// \\t\\t\\t\\t&:not(:last-child) {\\n// \\t\\t\\t\\t\\t// margin-right: 15px;\\n// \\t\\t\\t\\t}\\n// \\t\\t\\t}\\n// \\t\\t}\\n\\n// \\t}\\n// }\\n/* END - Carousel Home */\\n\\n\\n\\n\\n@-webkit-keyframes customPulsate {\\n 0% {\\n\\t\\ttransform: scale(1);\\n }\\n\\t50% {\\n\\t\\ttransform: scale(1.4);\\n }\\n\\t100% {\\n\\t\\ttransform: scale(1);\\n }\\n}"],"sourceRoot":""}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9zcmMvYWQvZGVza3RvcC9kZXNrdG9wLnNjc3M/YWQ0MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDNEg7QUFDN0I7QUFDL0YsOEJBQThCLG1GQUEyQixDQUFDLHdHQUFxQztBQUMvRjtBQUNBLCtEQUErRCxTQUFTLFVBQVUsc0JBQXNCLG9CQUFvQixrQkFBa0IsTUFBTSxPQUFPLFdBQVcsWUFBWSxzQ0FBc0Msa0JBQWtCLFVBQVUsYUFBYSx1QkFBdUIsbUJBQW1CLFdBQVcsNkNBQTZDLGVBQWUsWUFBWSx1QkFBdUIsZUFBZSxpQ0FBaUMsa0JBQWtCLDRDQUE0QyxxQkFBcUIsZ0RBQWdELGdEQUFnRCxxQkFBcUIsbURBQW1ELDJDQUEyQywrQ0FBK0MsWUFBWSxhQUFhLHVCQUF1QixtQkFBbUIsa0JBQWtCLHlCQUF5QiwyQkFBMkIsOEJBQThCLHVEQUF1RCxZQUFZLGFBQWEsdUJBQXVCLG1CQUFtQixpQkFBaUIseUJBQXlCLDRCQUE0QiwrQkFBK0IsMkRBQTJELFlBQVksY0FBYyxpQ0FBaUMsbUNBQW1DLHdDQUF3QyxxQkFBcUIsV0FBVyxZQUFZLDRCQUE0QixrQkFBa0IsV0FBVyxZQUFZLGFBQWEsOEJBQThCLG1CQUFtQiwyQkFBMkIseUJBQXlCLFVBQVUscUNBQXFDLFdBQVcseUJBQXlCLHNDQUFzQyxVQUFVLGlCQUFpQixtQkFBbUIsYUFBYSw4QkFBOEIsbUJBQW1CLGVBQWUsNENBQTRDLGFBQWEsdUJBQXVCLG1CQUFtQixZQUFZLFlBQVksNkNBQTZDLGVBQWUsV0FBVyxlQUFlLHlCQUF5QixzQkFBc0IscUJBQXFCLGlCQUFpQiwwREFBMEQsWUFBWSxnREFBZ0QsV0FBVyxZQUFZLCtCQUErQixtREFBbUQsY0FBYyxnREFBZ0QseUJBQXlCLGVBQWUsbUJBQW1CLG9EQUFvRCx1Q0FBdUMsMERBQTBELHFCQUFxQiwwQkFBMEIsV0FBVywwQkFBMEIsMkJBQTJCLGtCQUFrQixhQUFhLFdBQVcsWUFB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QjtBQUNBLGlFQUFlLHVCQUF1QixFQUFDIiwiZmlsZSI6IjY0Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiKiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7bWFyZ2luOjA7cGFkZGluZzowO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uY3JlYXRpdmUtY29udGFpbmVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5jcmVhdGl2ZS1jb250YWluZXIgYnV0dG9uLmN0YS1idXR0b257cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtjb2xvcjojZmZmO2ZvbnQtZmFtaWx5OlxcXCJIYXBwaW5lc3NWUmVndWxhclxcXCIsc2Fucy1zZXJpZjtmb250LXNpemU6MThweDtib3JkZXI6bm9uZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YWxsIDEyMG1zIGVhc2UtaW4tb3V0O2JvcmRlci1yYWRpdXM6M3B4fS5jcmVhdGl2ZS1jb250YWluZXIgYnV0dG9uLmN0YS1idXR0b246aG92ZXJ7dHJhbnNmb3JtOnNjYWxlKDEuMSk7Ym94LXNoYWRvdzpyZ2JhKDI1NSwyNTUsMjU1LC41KSAwcHggMnB4IDhweCAwcHh9LmNyZWF0aXZlLWNvbnRhaW5lciBidXR0b24uY3RhLWJ1dHRvbjpob3ZlciBpbWd7dHJhbnNmb3JtOnNjYWxlKDEuMyk7LXdlYmtpdC1hbmltYXRpb246Y3VzdG9tUHVsc2F0ZSAycyBsaW5lYXIgaW5maW5pdGU7YW5pbWF0aW9uOmN1c3RvbVB1bHNhdGUgMnMgbGluZWFyIGluZmluaXRlfS5jcmVhdGl2ZS1jb250YWluZXIgYnV0dG9uLmN0YS1idXR0b24+ZGl2LnRleHR7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MTJweCAyMHB4O2JhY2tncm91bmQtY29sb3I6IzBlMzU2ZTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjVweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjVweH0uY3JlYXRpdmUtY29udGFpbmVyIGJ1dHRvbi5jdGEtYnV0dG9uPmRpdi5pY29uLXdyYXBwZXJ7aGVpZ2h0OjQycHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MHB4IDE0cHg7YmFja2dyb3VuZC1jb2xvcjojMDkyZTYzO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjVweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo1cHh9LmNyZWF0aXZlLWNvbnRhaW5lciBidXR0b24uY3RhLWJ1dHRvbj5kaXYuaWNvbi13cmFwcGVyIGltZ3toZWlnaHQ6MTRweDtkaXNwbGF5OmJsb2NrO3RyYW5zaXRpb246YWxsIDEyMG1zIGVhc2UtaW4tb3V0fS5jcmVhdGl2ZS1jb250YWluZXIgdmlkZW8uYWQtdmlkZW97YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudCAhaW1wb3J0YW50fS5pbnRlcmFjdGl2ZS1jb250ZW50e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LmludGVyYWN0aXZlLWNvbnRlbnQgaGVhZGVye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7aGVpZ2h0OjY1cHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjEwcHggMHB4IDEwcHggMjVweDtiYWNrZ3JvdW5kLWNvbG9yOiMwZTM1NmU7ei1pbmRleDoxfS5pbnRlcmFjdGl2ZS1jb250ZW50IGhlYWRlciBpbWcubG9nb3t3aWR0aDphdXRvO2hlaWdodDpjYWxjKDY1cHggLSAxNHB4KX0uaW50ZXJhY3RpdmUtY29udGVudCBoZWFkZXIgZGl2Lmxpbmtze3dpZHRoOjgyJTttYXJnaW4tbGVmdDo0MHB4O3BhZGRpbmctcmlnaHQ6MTBweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO2ZvbnQtc2l6ZToxNnB4fS5pbnRlcmFjdGl2ZS1jb250ZW50IGhlYWRlciBkaXYubGlua3MgLmxpbmt7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDo2NXB4O3BhZGRpbmc6MHB4O2ZvbnQtZmFtaWx5OlxcXCJIYXBwaW5lc3NWUmVndWxhclxcXCIsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtjb2xvcjojZmZmO2N1cnNvcjpwb2ludGVyOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uaW50ZXJhY3RpdmUtY29udGVudCBoZWFkZXIgZGl2LmxpbmtzIC5saW5rLnBhZ2UtbGluayBpbWd7aGVpZ2h0OjE2cHh9LmludGVyYWN0aXZlLWNvbnRlbnQgaGVhZGVyIGRpdi5saW5rcyAubGluayBpbWd7d2lkdGg6YXV0bztoZWlnaHQ6MThweDtwb2ludGVyLWV2ZW50czpub25lICFpbXBvcnRhbnR9LmludGVyYWN0aXZlLWNvbnRlbnQgaGVhZGVyIGRpdi5saW5rcyAubGluay5hY3RpdmV7Y29sb3I6IzczYWRmY30uaW50ZXJhY3RpdmUtY29udGVudCBoZWFkZXIgZGl2LmxpbmtzIC5jdGEtbGlua3tiYWNrZ3JvdW5kLWNvbG9yOiMwZTM1NmU7cGFkZGluZzowIDMwcHg7dHJhbnNmb3JtOnNjYWxlKDEpfS5pbnRlcmFjdGl2ZS1jb250ZW50IGhlYWRlciBkaXYubGlua3MgLmN0YS1saW5rIGltZ3t0cmFuc2l0aW9uOnRyYW5zZm9ybSAyMDBtcyBlYXNlLWluLW91dH0uaW50ZXJhY3RpdmUtY29udGVudCBoZWFkZXIgZGl2LmxpbmtzIC5jdGEtbGluazpob3ZlciBpbWd7dHJhbnNmb3JtOnNjYWxlKDEuMil9LmludGVyYWN0aXZlLWNvbnRlbnQgbWFpbnt3aWR0aDoxMDAlO2hlaWdodDpjYWxjKDM2MHB4IC0gNjVweCl9LmludGVyYWN0aXZlLWNvbnRlbnQgLnBhZ2V7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpub25lO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojMGUzNTZlfS5pbnRlcmFjdGl2ZS1jb250ZW50IC5wYWdlLmN1cnJlbnQtcGFnZXtkaXNwbGF5OmJsb2NrfS5pbnRlcmFjdGl2ZS1jb250ZW50IC5wYWdlIGltZy5wYWdlLWJhY2tncm91bmR7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2JvdHRvbTowO3dpZHRoOjEwMCU7aGVpZ2h0OmF1dG99LmludGVyYWN0aXZlLWNvbnRlbnQgLnBhZ2UtZmlyc3QtcGFnZSBidXR0b24uY3RhLWJ1dHRvbntsZWZ0OjQwMHB4O2JvdHRvbToyNXB4fS5pbnRlcmFjdGl2ZS1jb250ZW50IC5wYWdlLWZpcnN0LXBhZ2UgaW1nLmx1eHVyeXt3aWR0aDoyMjBweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Ojg2cHg7Ym90dG9tOjE0cHh9LmludGVyYWN0aXZlLWNvbnRlbnQgLnBhZ2Utc2Vjb25kLXBhZ2UgYnV0dG9uLmN0YS1idXR0b257bGVmdDozMHB4O2JvdHRvbToyNnB4fS5pbnRlcmFjdGl2ZS1jb250ZW50IC5wYWdlLXNlY29uZC1wYWdlIGltZy50ZXh0e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MzBweDt0b3A6MzBweDt3aWR0aDoyNjBweH0uaW50ZXJhY3RpdmUtY29udGVudCAucGFnZS10aGlyZC1wYWdlIGJ1dHRvbi5jdGEtYnV0dG9ue2JvdHRvbToxMHB4O2xlZnQ6MjIwcHh9LmludGVyYWN0aXZlLWNvbnRlbnQgLnBhZ2UtZm91cnRoLXBhZ2UgaW1nLnRleHR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDozMHB4O3RvcDozMHB4O3dpZHRoOjI1MHB4fS5pbnRlcmFjdGl2ZS1jb250ZW50IC5wYWdlLWZvdXJ0aC1wYWdlIGJ1dHRvbi5jdGEtYnV0dG9ue2JvdHRvbTo0MHB4O2xlZnQ6MzBweH0uaW50ZXJhY3RpdmUtY29udGVudCAucGFnZS1maWZ0aC1wYWdlIGltZy50ZXh0e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MzBweDt0b3A6MjBweDt3aWR0aDoyNTBweH0uaW50ZXJhY3RpdmUtY29udGVudCAucGFnZS1maWZ0aC1wYWdlIGJ1dHRvbi5jdGEtYnV0dG9ue2JvdHRvbToxM3B4O2xlZnQ6MzBweH0uc3F1YXJlLWNhcm91c2Vse3Bvc2l0aW9uOmFic29sdXRlO3RvcDoyMHB4O3JpZ2h0OjI1cHg7d2lkdGg6MjYwcHg7aGVpZ2h0OjI2MHB4O292ZXJmbG93OmhpZGRlbjttYXJnaW46MCBhdXRvfS5zcXVhcmUtY2Fyb3VzZWwgdWwuZ2xpZGVfX3NsaWRlc3tkaXNwbGF5OmZsZXg7bGlzdC1zdHlsZTpub25lfS5zcXVhcmUtY2Fyb3VzZWwgbGkuZ2xpZGVfX3NsaWRle3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyfS5zcXVhcmUtY2Fyb3VzZWwgbGkuZ2xpZGVfX3NsaWRlOmhvdmVyIGltZy5zbGlkZS1pbWd7ZmlsdGVyOmNvbnRyYXN0KDEyMCUpfS5zcXVhcmUtY2Fyb3VzZWwgbGkuZ2xpZGVfX3NsaWRlOmhvdmVyIGltZy5zbGlkZS10aXRsZXt0cmFuc2Zvcm06c2NhbGUoMS4yKX0uc3F1YXJlLWNhcm91c2VsIGltZ3tkaXNwbGF5OmJsb2NrO2hlaWdodDphdXRvO3dpZHRoOjEwMCU7bWFyZ2luOmF1dG87ei1pbmRleDoxO3RyYW5zaXRpb246YWxsIDIwMG1zIGVhc2UtaW4tb3V0O3BvaW50ZXItZXZlbnRzOm5vbmUgIWltcG9ydGFudDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnNxdWFyZS1jYXJvdXNlbCBpbWc6aG92ZXJ7ZmlsdGVyOmNvbnRyYXN0KDEyMCUpfS5zcXVhcmUtY2Fyb3VzZWwgLmdsaWRlX19hcnJvd3N7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo0MHB4O2JvdHRvbToxNXB4O3dpZHRoOi13ZWJraXQtZml0LWNvbnRlbnQ7d2lkdGg6LW1vei1maXQtY29udGVudDt3aWR0aDpmaXQtY29udGVudDtoZWlnaHQ6NTBweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5zcXVhcmUtY2Fyb3VzZWwgLmdsaWRlX19hcnJvd3MgLmdsaWRlX19hcnJvd3MtY29udGFpbmVye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS5zcXVhcmUtY2Fyb3VzZWwgLmdsaWRlX19hcnJvd3MgYnV0dG9uLmdsaWRlX19hcnJvd3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ei1pbmRleDo5OTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Ym9yZGVyOm5vbmU7aGVpZ2h0OjMwcHg7d2lkdGg6MzBweDtwYWRkaW5nOjZweDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAxMjBtcyBlYXNlLWluLW91dDtib3JkZXItcmFkaXVzOjA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC44KX0uc3F1YXJlLWNhcm91c2VsIC5nbGlkZV9fYXJyb3dzIGJ1dHRvbi5nbGlkZV9fYXJyb3cgaW1ne2hlaWdodDoxMDAlO21hcmdpbjowfS5zcXVhcmUtY2Fyb3VzZWwgLmdsaWRlX19hcnJvd3MgYnV0dG9uLmdsaWRlX19hcnJvdzpob3ZlcntjdXJzb3I6cG9pbnRlcjt0cmFuc2Zvcm06c2NhbGUoMS4xKX0uc3F1YXJlLWNhcm91c2VsIC5nbGlkZV9fYXJyb3dzIGJ1dHRvbi5nbGlkZV9fYXJyb3ctLWxlZnR7cG9zaXRpb246YWJzb2x1dGU7dG9wOi03OHB4O2xlZnQ6LTIwcHh9LnNxdWFyZS1jYXJvdXNlbCAuZ2xpZGVfX2Fycm93cyBidXR0b24uZ2xpZGVfX2Fycm93LS1yaWdodHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTc4cHg7cmlnaHQ6LTIxMHB4fS5zcXVhcmUtY2Fyb3VzZWwgLmdsaWRlX19hcnJvd3MgZGl2LmRvdC1idXR0b257cGFkZGluZzoxMHB4O2N1cnNvcjpwb2ludGVyfS5zcXVhcmUtY2Fyb3VzZWwgLmdsaWRlX19hcnJvd3MgZGl2LmRvdC1idXR0b24gZGl2LmRvdHtib3gtc2hhZG93OjAgNHB4IDVweCAtMnB4ICM4Njg2ODY7d2lkdGg6MTBweDtoZWlnaHQ6MTBweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpO3BvaW50ZXItZXZlbnRzOm5vbmV9LnNxdWFyZS1jYXJvdXNlbCAuZ2xpZGVfX2Fycm93cyBkaXYuZG90LWJ1dHRvbiBkaXYuZG90LmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LmZ1bGwtd2lkdGgtY2Fyb3VzZWx7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6M3B4O2xlZnQ6LTIwcHg7d2lkdGg6NjYwcHg7aGVpZ2h0OjI0MHB4O292ZXJmbG93OmhpZGRlbjttYXJnaW46MCBhdXRvfS5mdWxsLXdpZHRoLWNhcm91c2VsIHVsLmdsaWRlX19zbGlkZXN7ZGlzcGxheTpmbGV4O2xpc3Qtc3R5bGU6bm9uZX0uZnVsbC13aWR0aC1jYXJvdXNlbCBsaS5nbGlkZV9fc2xpZGV7cG9zaXRpb246cmVsYXRpdmU7Y3Vyc29yOnBvaW50ZXJ9LmZ1bGwtd2lkdGgtY2Fyb3VzZWwgbGkuZ2xpZGVfX3NsaWRlOmhvdmVyIGltZ3tmaWx0ZXI6Y29udHJhc3QoMTIwJSl9LmZ1bGwtd2lkdGgtY2Fyb3VzZWwgbGkuZ2xpZGVfX3NsaWRlLmdsaWRlX19zbGlkZS0tYWN0aXZle3RyYW5zZm9ybTpzY2FsZSgxLjYyKTttYXJnaW46MCA3MHB4ICFpbXBvcnRhbnQ7Ym9yZGVyOjJweCBzb2xpZCAjZmZmfS5mdWxsLXdpZHRoLWNhcm91c2VsIGltZ3tkaXNwbGF5OmJsb2NrO2hlaWdodDphdXRvO3dpZHRoOjEwMCU7bWFyZ2luOmF1dG87ei1pbmRleDoxO3BvaW50ZXItZXZlbnRzOm5vbmUgIWltcG9ydGFudDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LmZ1bGwtd2lkdGgtY2Fyb3VzZWwgaW1nOmhvdmVye2ZpbHRlcjpjb250cmFzdCgxMjAlKX0uZnVsbC13aWR0aC1jYXJvdXNlbCAuZ2xpZGVfX2Fycm93c3twb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjQwcHg7Ym90dG9tOjE1cHg7d2lkdGg6LXdlYmtpdC1maXQtY29udGVudDt3aWR0aDotbW96LWZpdC1jb250ZW50O3dpZHRoOmZpdC1jb250ZW50O2hlaWdodDo1MHB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LmZ1bGwtd2lkdGgtY2Fyb3VzZWwgLmdsaWRlX19hcnJvd3MgLmdsaWRlX19hcnJvd3MtY29udGFpbmVye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS5mdWxsLXdpZHRoLWNhcm91c2VsIC5nbGlkZV9fYXJyb3dzIGJ1dHRvbi5nbGlkZV9fYXJyb3d7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3otaW5kZXg6OTk7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO2JvcmRlcjpub25lO2hlaWdodDozMHB4O3dpZHRoOjMwcHg7cGFkZGluZzo2cHg7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gMTIwbXMgZWFzZS1pbi1vdXQ7Ym9yZGVyLXJhZGl1czowO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuOCl9LmZ1bGwtd2lkdGgtY2Fyb3VzZWwgLmdsaWRlX19hcnJvd3MgYnV0dG9uLmdsaWRlX19hcnJvdyBpbWd7aGVpZ2h0OjEwMCU7bWFyZ2luOjB9LmZ1bGwtd2lkdGgtY2Fyb3VzZWwgLmdsaWRlX19hcnJvd3MgYnV0dG9uLmdsaWRlX19hcnJvdzpob3ZlcntjdXJzb3I6cG9pbnRlcjt0cmFuc2Zvcm06c2NhbGUoMS4xKX0uZnVsbC13aWR0aC1jYXJvdXNlbCAuZ2xpZGVfX2Fycm93cyBidXR0b24uZ2xpZGVfX2Fycm93LS1sZWZ0e3Bvc2l0aW9uOmFic29sdXRlO3RvcDotNjhweDtsZWZ0OjBweH0uZnVsbC13aWR0aC1jYXJvdXNlbCAuZ2xpZGVfX2Fycm93cyBidXR0b24uZ2xpZGVfX2Fycm93LS1yaWdodHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTY4cHg7cmlnaHQ6LTYwMHB4fS5mdWxsLXdpZHRoLWNhcm91c2VsIC5nbGlkZV9fYXJyb3dzIGRpdi5kb3QtYnV0dG9ue3BhZGRpbmc6MTBweDtjdXJzb3I6cG9pbnRlcn0uZnVsbC13aWR0aC1jYXJvdXNlbCAuZ2xpZGVfX2Fycm93cyBkaXYuZG90LWJ1dHRvbiBkaXYuZG90e2JveC1zaGFkb3c6MCA0cHggNXB4IC0ycHggIzg2ODY4Njt3aWR0aDoxMHB4O2hlaWdodDoxMHB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSk7cG9pbnRlci1ldmVudHM6bm9uZX0uZnVsbC13aWR0aC1jYXJvdXNlbCAuZ2xpZGVfX2Fycm93cyBkaXYuZG90LWJ1dHRvbiBkaXYuZG90LmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9QC13ZWJraXQta2V5ZnJhbWVzIGN1c3RvbVB1bHNhdGV7MCV7dHJhbnNmb3JtOnNjYWxlKDEpfTUwJXt0cmFuc2Zvcm06c2NhbGUoMS40KX0xMDAle3RyYW5zZm9ybTpzY2FsZSgxKX19XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL2FkL2Rlc2t0b3AvZGVza3RvcC5zY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQVVBLHFCQUdDLFFBQUEsQ0FDQSxTQUFBLENBQ0EscUJBQUEsQ0FHRCxvQkFDRSxpQkFBQSxDQUNBLEtBQUEsQ0FDRCxNQUFBLENBQ0MsVUFBQSxDQUNBLFdBQUEsQ0FJRCxzQ0FDQyxpQkFBQSxDQUNBLFNBQUEsQ0FDQSxZQUFBLENBQ0Esc0JBQUEsQ0FDQSxrQkFBQSxDQUNBLFVBQUEsQ0FDQSwwQ0EzQmUsQ0E0QmYsY0FBQSxDQUNBLFdBQUEsQ0FDQSxzQkFBQSxDQUNBLGNBQUEsQ0FDQSxnQ0FBQSxDQUNBLGlCQUFBLENBQ0EsNENBQ0Msb0JBQUEsQ0FDQSwrQ0FBQSxDQUVELGdEQUND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QSxXQUFBLENBQ0EsWUFBQSxDQUNBLHNCQUFBLENBQ0Esa0JBQUEsQ0FJRCx3REFDQyxZQUFBLENBQ0Esc0JBQUEsQ0FDQSxrQkFBQSxDQUVBLFVBQUEsQ0FDQSx3QkFBQSxDQUNBLFdBQUEsQ0FDQSxXQUFBLENBQ0EsVUFBQSxDQUNBLFdBQUEsQ0FDQSxzQ0FBQSxDQUNBLGVBQUEsQ0FDQSxxQ0FBQSxDQUVBLDREQUNDLFdBQUEsQ0FDQSxRQUFBLENBR0QsOERBQ0MsY0FBQSxDQUNBLG9CQUFBLENBR0QsOERBQ0MsaUJBQUEsQ0FDQSxTQUFBLENBQ0EsUUFBQSxDQU1ELCtEQUNDLGlCQUFBLENBQ0EsU0FBQSxDQUNBLFlBQUEsQ0FTRixtREFDQyxZQUFBLENBQ0EsY0FBQSxDQUVBLDJEQUNDLGlDQUFBLENBQ0EsVUFBQSxDQUNBLFdBQUEsQ0FDQSxpQkFBQSxDQUNBLHFDQUFBLENBQ0EsbUJBQUEsQ0FDQSxrRUFDQyxxQkFBQSxDQWtLTCxpQ0FDRSxHQUNBLGtCQUFBLENBRUQsSUFDQyxvQkFBQSxDQUVELEtBQ0Msa0JBQUEsQ0FBQVwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIkaGVhZGVyLWhlaWdodDogNjVweDtcXG5cXG4kY29sb3ItYmx1ZTogIzBFMzU2RTtcXG4kY29sb3ItYmx1ZS1kYXJrOiAjMDkyRTYzO1xcbiRjb2xvci1saW5rLWFjdGl2ZTogIzczQURGQztcXG5cXG4kZm9udC1nZW5iYXM6ICdHZW5CYXNSUmVndWxhcicsIHNhbnMtc2VyaWY7XFxuJGZvbnQtaGFwcGluZXNzOiAnSGFwcGluZXNzVlJlZ3VsYXInLCBzYW5zLXNlcmlmO1xcblxcblxcbiosXFxuKjo6YmVmb3JlLFxcbio6OmFmdGVyIHtcXG5cXHRtYXJnaW46IDA7XFxuXFx0cGFkZGluZzogMDtcXG5cXHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG5cXG4uY3JlYXRpdmUtY29udGFpbmVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG5cXHRsZWZ0OiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICAvLyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcblxcblxcblxcdGJ1dHRvbi5jdGEtYnV0dG9uIHtcXG5cXHRcXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFx0XFx0ei1pbmRleDogMTtcXG5cXHRcXHRkaXNwbGF5OiBmbGV4O1xcblxcdFxcdGp1c3RpZnktY29udGVudDogY2VudGVyO1xcblxcdFxcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuXFx0XFx0Y29sb3I6ICNmZmY7XFxuXFx0XFx0Zm9udC1mYW1pbHk6ICRmb250LWhhcHBpbmVzcztcXG5cXHRcXHRmb250LXNpemU6IDE4cHg7XFxuXFx0XFx0Ym9yZGVyOiBub25lO1xcblxcdFxcdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcblxcdFxcdGN1cnNvcjogcG9pbnRlcjtcXG5cXHRcXHR0cmFuc2l0aW9uOiBhbGwgMTIwbXMgZWFzZS1pbi1vdXQ7XFxuXFx0XFx0Ym9yZGVyLXJhZGl1czogM3B4O1xcblxcdFxcdCY6aG92ZXIge1xcblxcdFxcdFxcdHRyYW5zZm9ybTogc2NhbGUoMS4xKTtcXG5cXHRcXHRcXHRib3gtc2hhZG93OiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSkgMHB4IDJweCA4cHggMHB4O1xcblxcdFxcdH1cXG5cXHRcXHQmOmhvdmVyIGltZyB7XFxuXFx0XFx0XFx0dHJhbnNmb3JtOiBzY2FsZSgxLjMpO1xcblxcdFxcdFxcdGFuaW1hdGlvbjogY3VzdG9tUHVsc2F0ZSAycyBsaW5lYXIgaW5maW5pdGU7XFxuXFx0XFx0fVxcblxcdFxcdCYgPiBkaXYudGV4dCB7XFxuXFx0XFx0XFx0aGVpZ2h0OiAxMDAlO1xcblxcdFxcdFxcdGRpc3BsYXk6IGZsZXg7XFxuXFx0XFx0XFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuXFx0XFx0XFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cXHRcXHRcXHRwYWRkaW5nOiAxMnB4IDIwcHg7XFxuXFx0XFx0XFx0YmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLWJsdWU7XFxuXFx0XFx0XFx0Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNXB4O1xcblxcdFxcdFxcdGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDVweDtcXG5cXHRcXHR9XFxuXFx0XFx0JiA+IGRpdi5pY29uLXdyYXBwZXIge1xcblxcdFxcdFxcdGhlaWdodDogNDJweDtcXG5cXHRcXHRcXHRkaXNwbGF5OiBmbGV4O1xcblxcdFxcdFxcdGp1c3RpZnktY29udGVudDogY2VudGVyO1xcblxcdFxcdFxcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuXFx0XFx0XFx0cGFkZGluZzogMHB4IDE0cHg7XFxuXFx0XFx0XFx0YmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLWJsdWUtZGFyaztcXG5cXHRcXHRcXHRib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNXB4O1xcblxcdFxcdFxcdGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA1cHg7XFxuXFx0XFx0XFx0aW1nIHtcXG5cXHRcXHRcXHRcXHRoZWlnaHQ6IDE0cHg7XFxuXFx0XFx0XFx0XFx0ZGlzcGxheTogYmxvY2s7XFxuXFx0XFx0XFx0XFx0dHJhbnNpdGlvbjogYWxsIDEyMG1zIGVhc2UtaW4tb3V0O1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFx0fVxcblxcblxcdHZpZGVvLmFkLXZpZGVvIHtcXG5cXHRcXHRiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcblxcdFxcdC8vIGJvcmRlcjogMXB4IHNvbGlkIHJlZDtcXG5cXHR9XFxufVxcblxcblxcbi8qKlxcbiAqIENvbnRlbnRcXG4gKi9cXG4uaW50ZXJhY3RpdmUtY29udGVudCB7XFxuXFx0d2lkdGg6IDEwMCU7XFxuXFx0aGVpZ2h0OiAxMDAlO1xcblxcblxcdGhlYWRlciB7XFxuXFx0XFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblxcdFxcdHdpZHRoOiAxMDAlO1xcblxcdFxcdGhlaWdodDogJGhlYWRlci1oZWlnaHQ7XFxuXFx0XFx0ZGlzcGxheTogZmxleDtcXG5cXHRcXHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuXFx0XFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cXHRcXHRwYWRkaW5nOiAxMHB4IDBweCAxMHB4IDI1cHg7XFxuXFx0XFx0YmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLWJsdWU7XFxuXFx0XFx0ei1pbmRleDogMTtcXG5cXG5cXHRcXHRpbWcubG9nbyB7XFxuXFx0XFx0XFx0d2lkdGg6IGF1dG87XFxuXFx0XFx0XFx0aGVpZ2h0OiBjYWxjKCN7JGhlYWRlci1oZWlnaHR9IC0gMTRweCk7XFxuXFx0XFx0fVxcblxcdFxcdGRpdi5saW5rcyB7XFxuXFx0XFx0XFx0d2lkdGg6IDgyJTtcXG5cXHRcXHRcXHRtYXJnaW4tbGVmdDogNDBweDtcXG5cXHRcXHRcXHRwYWRkaW5nLXJpZ2h0OiAxMHB4O1xcblxcdFxcdFxcdGRpc3BsYXk6IGZsZXg7XFxuXFx0XFx0XFx0anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcblxcdFxcdFxcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuXFx0XFx0XFx0Zm9udC1zaXplOiAxNnB4O1xcblxcblxcdFxcdFxcdC5saW5rIHtcXG5cXHRcXHRcXHRcXHRkaXNwbGF5OiBmbGV4O1xcblxcdFxcdFxcdFxcdGp1c3RpZnktY29udGVudDogY2VudGVyO1xcblxcdFxcdFxcdFxcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuXFx0XFx0XFx0XFx0aGVpZ2h0OiAkaGVhZGVyLWhlaWdodDtcXG5cXHRcXHRcXHRcXHRwYWRkaW5nOiAwcHg7XFxuXFx0XFx0XFx0XFx0Zm9udC1mYW1pbHk6ICRmb250LWhhcHBpbmVzcztcXG5cXHRcXHRcXHRcXHRmb250LXNpemU6IDE0cHg7XFxuXFx0XFx0XFx0XFx0Y29sb3I6ICNmZmY7XFxuXFx0XFx0XFx0XFx0Y3Vyc29yOiBwb2ludGVyO1xcblxcdFxcdFxcdFxcdHVzZXItc2VsZWN0OiBub25lO1xcblxcdFxcdFxcdFxcdC8vIHRyYW5zaXRpb246IGJvcmRlciAxMjBtcyBlYXNlLWluLW91dDtcXG5cXHRcXHRcXHRcXHQmLnBhZ2UtbGluayBpbWcge1xcblxcdFxcdFxcdFxcdFxcdGhlaWdodDogMTZweDtcXG5cXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0XFx0aW1nIHtcXG5cXHRcXHRcXHRcXHRcXHR3aWR0aDogYXV0bztcXG5cXHRcXHRcXHRcXHRcXHRoZWlnaHQ6IDE4cHg7XFxuXFx0XFx0XFx0XFx0XFx0cG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDtcXG5cXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0XFx0Ji5hY3RpdmUge1xcblxcdFxcdFxcdFxcdFxcdGNvbG9yOiAkY29sb3ItbGluay1hY3RpdmU7XFxuXFx0XFx0XFx0XFx0fVxcblxcdFxcdFxcdH1cXG5cXG5cXHRcXHRcXHQuY3RhLWxpbmsge1xcblxcdFxcdFxcdFxcdGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1ibHVlO1xcblxcdFxcdFxcdFxcdHBhZGRpbmc6IDAgMzBweDtcXG5cXHRcXHRcXHRcXHR0cmFuc2Zvcm06IHNjYWxlKDEpO1xcblxcdFxcdFxcdFxcdGltZyB7XFxuXFx0XFx0XFx0XFx0XFx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIDIwMG1zIGVhc2UtaW4tb3V0O1xcblxcdFxcdFxcdFxcdH1cXG5cXHRcXHRcXHRcXHQmOmhvdmVyIGltZyB7XFxuXFx0XFx0XFx0XFx0XFx0dHJhbnNmb3JtOiBzY2FsZSgxLjIpO1xcblxcdFxcdFxcdFxcdH1cXG5cXHRcXHRcXHR9XFxuXFx0XFx0fVxcblxcdH1cXG5cXG5cXHRtYWluIHtcXG5cXHRcXHR3aWR0aDogMTAwJTtcXG5cXHRcXHRoZWlnaHQ6IGNhbGMoMzYwcHggLSAjeyRoZWFkZXItaGVpZ2h0fSk7XFxuXFx0XFx0Ly8gYm9yZGVyOiAxcHggc29saWQgYmx1ZTtcXG5cXHR9XFxuXFxuXFx0LnBhZ2Uge1xcblxcdFxcdHBvc2l0aW9uOiByZWxhdGl2ZTtcXG5cXHRcXHRkaXNwbGF5OiBub25lO1xcblxcdFxcdHdpZHRoOiAxMDAlO1xcblxcdFxcdGhlaWdodDogMTAwJTtcXG5cXHRcXHRiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3ItYmx1ZTtcXG5cXHRcXHQmLmN1cnJlbnQtcGFnZSB7XFxuXFx0XFx0XFx0ZGlzcGxheTogYmxvY2s7XFxuXFx0XFx0fVxcblxcblxcdFxcdGltZy5wYWdlLWJhY2tncm91bmQge1xcblxcdFxcdFxcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG5cXHRcXHRcXHRsZWZ0OiAwO1xcblxcdFxcdFxcdGJvdHRvbTogMDtcXG5cXHRcXHRcXHR3aWR0aDogMTAwJTtcXG5cXHRcXHRcXHRoZWlnaHQ6IGF1dG87XFxuXFx0XFx0fVxcblxcblxcdFxcdCYtZmlyc3QtcGFnZSB7XFxuXFx0XFx0XFx0YnV0dG9uLmN0YS1idXR0b24ge1xcblxcdFxcdFxcdFxcdGxlZnQ6IDQwMHB4O1xcblxcdFxcdFxcdFxcdGJvdHRvbTogMjVweDtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0XFx0aW1nLmx1eHVyeSB7XFxuXFx0XFx0XFx0XFx0d2lkdGg6IDIyMHB4O1xcblxcdFxcdFxcdFxcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG5cXHRcXHRcXHRcXHRsZWZ0OiA4NnB4O1xcblxcdFxcdFxcdFxcdGJvdHRvbTogMTRweDtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fVxcblxcblxcdFxcdCYtc2Vjb25kLXBhZ2Uge1xcblxcdFxcdFxcdGJ1dHRvbi5jdGEtYnV0dG9uIHtcXG5cXHRcXHRcXHRcXHRsZWZ0OiAzMHB4O1xcblxcdFxcdFxcdFxcdGJvdHRvbTogMjZweDtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0XFx0aW1nLnRleHQge1xcblxcdFxcdFxcdFxcdHBvc2l0aW9uOiByZWxhdGl2ZTtcXG5cXHRcXHRcXHRcXHRsZWZ0OiAzMHB4O1xcblxcdFxcdFxcdFxcdHRvcDogMzBweDtcXG5cXHRcXHRcXHRcXHR3aWR0aDogMjYwcHg7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXG5cXHRcXHQmLXRoaXJkLXBhZ2Uge1xcblxcdFxcdFxcdGJ1dHRvbi5jdGEtYnV0dG9uIHtcXG5cXHRcXHRcXHRcXHRib3R0b206IDEwcHg7XFxuXFx0XFx0XFx0XFx0bGVmdDogMjIwcHg7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXG5cXHRcXHQmLWZvdXJ0aC1wYWdlIHtcXG5cXHRcXHRcXHRpbWcudGV4dCB7XFxuXFx0XFx0XFx0XFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblxcdFxcdFxcdFxcdGxlZnQ6IDMwcHg7XFxuXFx0XFx0XFx0XFx0dG9wOiAzMHB4O1xcblxcdFxcdFxcdFxcdHdpZHRoOiAyNTBweDtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0XFx0YnV0dG9uLmN0YS1idXR0b24ge1xcblxcdFxcdFxcdFxcdGJvdHRvbTogNDBweDtcXG5cXHRcXHRcXHRcXHRsZWZ0OiAzMHB4O1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFxuXFx0XFx0Ji1maWZ0aC1wYWdlIHtcXG5cXHRcXHRcXHRpbWcudGV4dCB7XFxuXFx0XFx0XFx0XFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblxcdFxcdFxcdFxcdGxlZnQ6IDMwcHg7XFxuXFx0XFx0XFx0XFx0dG9wOiAyMHB4O1xcblxcdFxcdFxcdFxcdHdpZHRoOiAyNTBweDtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0XFx0YnV0dG9uLmN0YS1idXR0b24ge1xcblxcdFxcdFxcdFxcdGJvdHRvbTogMTNweDtcXG5cXHRcXHRcXHRcXHRsZWZ0OiAzMHB4O1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFx0fVxcbn1cXG5cXG5cXG5cXG4vKiBTVEFSVCAtIENhcm91c2VsIFNxdWFyZSAqLyBcXG4uc3F1YXJlLWNhcm91c2VsIHtcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFx0dG9wOiAyMHB4O1xcblxcdHJpZ2h0OiAyNXB4O1xcblxcdHdpZHRoOiAyNjBweDtcXG5cXHRoZWlnaHQ6IDI2MHB4O1xcblxcdG92ZXJmbG93OiBoaWRkZW47XFxuXFx0bWFyZ2luOiAwIGF1dG87XFxuXFxuXFx0Ly8gLmdsaWRlX190cmFjayB7fVxcblxcblxcdHVsLmdsaWRlX19zbGlkZXMge1xcblxcdFxcdGRpc3BsYXk6IGZsZXg7XFxuXFx0XFx0bGlzdC1zdHlsZTogbm9uZTtcXG5cXHR9XFxuXFxuXFx0bGkuZ2xpZGVfX3NsaWRlIHtcXG5cXHRcXHQvLyB3aWR0aDogMzkwcHg7XFxuXFx0XFx0Ly8gaGVpZ2h0OiAyMjBweDtcXG5cXHRcXHRwb3NpdGlvbjogcmVsYXRpdmU7XFxuXFx0XFx0Y3Vyc29yOiBwb2ludGVyO1xcblxcdFxcdCY6aG92ZXIgaW1nLnNsaWRlLWltZyB7XFxuXFx0XFx0XFx0ZmlsdGVyOiBjb250cmFzdCgxMjAlKTtcXG5cXHRcXHR9XFxuXFx0XFx0Jjpob3ZlciBpbWcuc2xpZGUtdGl0bGUge1xcblxcdFxcdFxcdHRyYW5zZm9ybTogc2NhbGUoMS4yKTtcXG5cXHRcXHR9XFxuXFx0fVxcblxcblxcdGltZyB7XFxuXFx0XFx0Ly8gcG9zaXRpb246IGFic29sdXRlO1xcblxcdFxcdGRpc3BsYXk6IGJsb2NrO1xcblxcdFxcdGhlaWdodDogYXV0bztcXG5cXHRcXHR3aWR0aDogMTAwJTtcXG5cXHRcXHRtYXJnaW46IGF1dG87XFxuXFx0XFx0Ly8gbWF4LXdpZHRoOiAzNjBweDtcXG5cXHRcXHR6LWluZGV4OiAxO1xcblxcdFxcdHRyYW5zaXRpb246IGFsbCAyMDBtcyBlYXNlLWluLW91dDtcXG5cXHRcXHRwb2ludGVyLWV2ZW50czogbm9uZSAhaW1wb3J0YW50O1xcblxcdFxcdHVzZXItc2VsZWN0OiBub25lO1xcblxcdFxcdCY6aG92ZXIge1xcblxcdFxcdFxcdGZpbHRlcjogY29udHJhc3QoMTIwJSk7XFxuXFx0XFx0fVxcblxcdH1cXG5cXG5cXG5cXHQuZ2xpZGVfX2Fycm93cyB7XFxuXFx0XFx0Ly8gcG9zaXRpb246IGFic29sdXRlO1xcblxcdFxcdC8vIHRvcDogODBweDtcXG5cXHRcXHQvLyB1c2VyLXNlbGVjdDogbm9uZTtcXG5cXHRcXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFx0XFx0bGVmdDogNDBweDtcXG5cXHRcXHRib3R0b206IDE1cHg7XFxuXFx0XFx0d2lkdGg6IGZpdC1jb250ZW50O1xcbiAgICBoZWlnaHQ6IDUwcHg7XFxuXFx0XFx0ZGlzcGxheTogZmxleDtcXG5cXHRcXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG5cXHRcXHRhbGlnbi1pdGVtczogY2VudGVyO1xcblxcdFxcdHVzZXItc2VsZWN0OiBub25lO1xcblxcblxcdFxcdC5nbGlkZV9fYXJyb3dzLWNvbnRhaW5lciB7XFxuXFx0XFx0XFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblxcdFxcdFxcdHdpZHRoOiAxMDAlO1xcblxcdFxcdFxcdGhlaWdodDogMTAwJTtcXG5cXHRcXHRcXHRkaXNwbGF5OiBmbGV4O1xcblxcdFxcdFxcdGp1c3RpZnktY29udGVudDogY2VudGVyO1xcblxcdFxcdFxcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgXFx0XFx0Ly8gaGVpZ2h0OiAxMDAlO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRidXR0b24uZ2xpZGVfX2Fycm93IHtcXG5cXHRcXHRcXHRkaXNwbGF5OiBmbGV4O1xcblxcdFxcdFxcdGp1c3RpZnktY29udGVudDogY2VudGVyO1xcblxcdFxcdFxcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuXFx0XFx0XFx0Ly8gcG9zaXRpb246IGFic29sdXRlO1xcblxcdFxcdFxcdHotaW5kZXg6IDk5O1xcblxcdFxcdFxcdGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMCk7XFxuXFx0XFx0XFx0Ym9yZGVyOiBub25lO1xcblxcdFxcdFxcdGhlaWdodDogMzBweDtcXG5cXHRcXHRcXHR3aWR0aDogMzBweDtcXG5cXHRcXHRcXHRwYWRkaW5nOiA2cHg7XFxuXFx0XFx0XFx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIDEyMG1zIGVhc2UtaW4tb3V0O1xcblxcdFxcdFxcdGJvcmRlci1yYWRpdXM6IDA7XFxuXFx0XFx0XFx0YmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xcblxcblxcdFxcdFxcdGltZyB7XFxuXFx0XFx0XFx0XFx0aGVpZ2h0OiAxMDAlO1xcblxcdFxcdFxcdFxcdG1hcmdpbjogMDtcXG5cXHRcXHRcXHR9XFxuXFxuXFx0XFx0XFx0Jjpob3ZlciB7XFxuXFx0XFx0XFx0XFx0Y3Vyc29yOiBwb2ludGVyO1xcblxcdFxcdFxcdFxcdHRyYW5zZm9ybTogc2NhbGUoMS4xKTtcXG5cXHRcXHRcXHR9XFxuXFxuXFx0XFx0XFx0Ji0tbGVmdCB7XFxuXFx0XFx0XFx0XFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdFxcdFxcdFxcdHRvcDogLTc4cHg7XFxuXFx0XFx0XFx0XFx0bGVmdDogLTIwcHg7XFxuXFx0XFx0XFx0XFx0aW1nIHtcXG5cXHRcXHRcXHRcXHRcXHQvLyBwb3NpdGlvbjogcmVsYXRpdmU7XFxuXFx0XFx0XFx0XFx0XFx0Ly8gcmlnaHQ6IDJweDtcXG5cXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0fVxcblxcdFxcdFxcdCYtLXJpZ2h0IHtcXG5cXHRcXHRcXHRcXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFx0XFx0XFx0XFx0dG9wOiAtNzhweDtcXG5cXHRcXHRcXHRcXHRyaWdodDogLTIxMHB4O1xcblxcdFxcdFxcdFxcdGltZyB7XFxuXFx0XFx0XFx0XFx0XFx0Ly8gcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuXFx0XFx0XFx0XFx0XFx0Ly8gcG9zaXRpb246IHJlbGF0aXZlO1xcblxcdFxcdFxcdFxcdFxcdC8vIGxlZnQ6IDNweDtcXG5cXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXG5cXHRcXHRkaXYuZG90LWJ1dHRvbiB7XFxuXFx0XFx0XFx0cGFkZGluZzogMTBweDtcXG5cXHRcXHRcXHRjdXJzb3I6IHBvaW50ZXI7XFxuXFxuXFx0XFx0XFx0ZGl2LmRvdCB7XFxuXFx0XFx0XFx0XFx0Ym94LXNoYWRvdzogMCA0cHggNXB4IC0ycHggcmdiKDEzNCwgMTM0LCAxMzQpO1xcblxcdFxcdFxcdFxcdHdpZHRoOiAxMHB4O1xcblxcdFxcdFxcdFxcdGhlaWdodDogMTBweDtcXG5cXHRcXHRcXHRcXHRib3JkZXItcmFkaXVzOiA1MCU7XFxuXFx0XFx0XFx0XFx0YmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xcblxcdFxcdFxcdFxcdHBvaW50ZXItZXZlbnRzOiBub25lO1xcblxcdFxcdFxcdFxcdCYuYWN0aXZlIHtcXG5cXHRcXHRcXHRcXHRcXHRiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDEpO1xcblxcdFxcdFxcdFxcdH1cXG5cXHRcXHRcXHRcXHQmOm5vdCg6bGFzdC1jaGlsZCkge1xcblxcdFxcdFxcdFxcdFxcdC8vIG1hcmdpbi1yaWdodDogMTVweDtcXG5cXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXG5cXHR9XFxufVxcbi8qIEVORCAtIENhcm91c2VsIFNxdWFyZSAqL1xcblxcblxcblxcbi8qIFNUQVJUIC0gQ2Fyb3VzZWwgRnVsbCBXaWR0aCAqLyBcXG4uZnVsbC13aWR0aC1jYXJvdXNlbCB7XFxuXFx0ZGlzcGxheTogZmxleDtcXG5cXHRhbGlnbi1pdGVtczogY2VudGVyO1xcblxcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG5cXHR0b3A6IDNweDtcXG5cXHRsZWZ0OiAtMjBweDtcXG5cXHR3aWR0aDogNjYwcHg7XFxuXFx0aGVpZ2h0OiAyNDBweDtcXG5cXHRvdmVyZmxvdzogaGlkZGVuO1xcblxcdG1hcmdpbjogMCBhdXRvO1xcblxcblxcdHVsLmdsaWRlX19zbGlkZXMge1xcblxcdFxcdGRpc3BsYXk6IGZsZXg7XFxuXFx0XFx0bGlzdC1zdHlsZTogbm9uZTtcXG5cXHR9XFxuXFxuXFx0bGkuZ2xpZGVfX3NsaWRlIHtcXG5cXHRcXHRwb3NpdGlvbjogcmVsYXRpdmU7XFxuXFx0XFx0Y3Vyc29yOiBwb2ludGVyO1xcblxcdFxcdCY6aG92ZXIgaW1nIHtcXG5cXHRcXHRcXHRmaWx0ZXI6IGNvbnRyYXN0KDEyMCUpO1xcblxcdFxcdH1cXG5cXG5cXHRcXHQmLmdsaWRlX19zbGlkZS0tYWN0aXZlIHtcXG5cXHRcXHRcXHR0cmFuc2Zvcm06IHNjYWxlKDEuNjIpO1xcblxcdFxcdFxcdG1hcmdpbjogMCA3MHB4ICFpbXBvcnRhbnQ7XFxuXFx0XFx0XFx0Ym9yZGVyOiAycHggc29saWQgI2ZmZjtcXG5cXHRcXHR9XFxuXFx0fVxcblxcblxcdGltZyB7XFxuXFx0XFx0ZGlzcGxheTogYmxvY2s7XFxuXFx0XFx0aGVpZ2h0OiBhdXRvO1xcblxcdFxcdHdpZHRoOiAxMDAlO1xcblxcdFxcdG1hcmdpbjogYXV0bztcXG5cXHRcXHR6LWluZGV4OiAxO1xcblxcdFxcdHBvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7XFxuXFx0XFx0dXNlci1zZWxlY3Q6IG5vbmU7XFxuXFx0XFx0Jjpob3ZlciB7XFxuXFx0XFx0XFx0ZmlsdGVyOiBjb250cmFzdCgxMjAlKTtcXG5cXHRcXHR9XFxuXFx0fVxcblxcblxcblxcdC5nbGlkZV9fYXJyb3dzIHtcXG5cXHRcXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFx0XFx0bGVmdDogNDBweDtcXG5cXHRcXHRib3R0b206IDE1cHg7XFxuXFx0XFx0d2lkdGg6IGZpdC1jb250ZW50O1xcbiAgICBoZWlnaHQ6IDUwcHg7XFxuXFx0XFx0ZGlzcGxheTogZmxleDtcXG5cXHRcXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG5cXHRcXHRhbGlnbi1pdGVtczogY2VudGVyO1xcblxcdFxcdHVzZXItc2VsZWN0OiBub25lO1xcblxcblxcdFxcdC5nbGlkZV9fYXJyb3dzLWNvbnRhaW5lciB7XFxuXFx0XFx0XFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblxcdFxcdFxcdHdpZHRoOiAxMDAlO1xcblxcdFxcdFxcdGhlaWdodDogMTAwJTtcXG5cXHRcXHRcXHRkaXNwbGF5OiBmbGV4O1xcblxcdFxcdFxcdGp1c3RpZnktY29udGVudDogY2VudGVyO1xcblxcdFxcdFxcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgXFx0XFx0Ly8gaGVpZ2h0OiAxMDAlO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRidXR0b24uZ2xpZGVfX2Fycm93IHtcXG5cXHRcXHRcXHRkaXNwbGF5OiBmbGV4O1xcblxcdFxcdFxcdGp1c3RpZnktY29udGVudDogY2VudGVyO1xcblxcdFxcdFxcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuXFx0XFx0XFx0Ly8gcG9zaXRpb246IGFic29sdXRlO1xcblxcdFxcdFxcdHotaW5kZXg6IDk5O1xcblxcdFxcdFxcdGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMCk7XFxuXFx0XFx0XFx0Ym9yZGVyOiBub25lO1xcblxcdFxcdFxcdGhlaWdodDogMzBweDtcXG5cXHRcXHRcXHR3aWR0aDogMzBweDtcXG5cXHRcXHRcXHRwYWRkaW5nOiA2cHg7XFxuXFx0XFx0XFx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIDEyMG1zIGVhc2UtaW4tb3V0O1xcblxcdFxcdFxcdGJvcmRlci1yYWRpdXM6IDA7XFxuXFx0XFx0XFx0YmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xcblxcblxcdFxcdFxcdGltZyB7XFxuXFx0XFx0XFx0XFx0aGVpZ2h0OiAxMDAlO1xcblxcdFxcdFxcdFxcdG1hcmdpbjogMDtcXG5cXHRcXHRcXHR9XFxuXFxuXFx0XFx0XFx0Jjpob3ZlciB7XFxuXFx0XFx0XFx0XFx0Y3Vyc29yOiBwb2ludGVyO1xcblxcdFxcdFxcdFxcdHRyYW5zZm9ybTogc2NhbGUoMS4xKTtcXG5cXHRcXHRcXHR9XFxuXFxuXFx0XFx0XFx0Ji0tbGVmdCB7XFxuXFx0XFx0XFx0XFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdFxcdFxcdFxcdHRvcDogLTY4cHg7XFxuXFx0XFx0XFx0XFx0bGVmdDogMHB4O1xcblxcdFxcdFxcdFxcdGltZyB7XFxuXFx0XFx0XFx0XFx0XFx0Ly8gcG9zaXRpb246IHJlbGF0aXZlO1xcblxcdFxcdFxcdFxcdFxcdC8vIHJpZ2h0OiAycHg7XFxuXFx0XFx0XFx0XFx0fVxcblxcdFxcdFxcdH1cXG5cXHRcXHRcXHQmLS1yaWdodCB7XFxuXFx0XFx0XFx0XFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdFxcdFxcdFxcdHRvcDogLTY4cHg7XFxuXFx0XFx0XFx0XFx0cmlnaHQ6IC02MDBweDtcXG5cXHRcXHRcXHRcXHRpbWcge1xcblxcdFxcdFxcdFxcdFxcdC8vIHBvaW50ZXItZXZlbnRzOiBub25lO1xcblxcdFxcdFxcdFxcdFxcdC8vIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG5cXHRcXHRcXHRcXHRcXHQvLyBsZWZ0OiAzcHg7XFxuXFx0XFx0XFx0XFx0fVxcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFxuXFx0XFx0ZGl2LmRvdC1idXR0b24ge1xcblxcdFxcdFxcdHBhZGRpbmc6IDEwcHg7XFxuXFx0XFx0XFx0Y3Vyc29yOiBwb2ludGVyO1xcblxcblxcdFxcdFxcdGRpdi5kb3Qge1xcblxcdFxcdFxcdFxcdGJveC1zaGFkb3c6IDAgNHB4IDVweCAtMnB4IHJnYigxMzQsIDEzNCwgMTM0KTtcXG5cXHRcXHRcXHRcXHR3aWR0aDogMTBweDtcXG5cXHRcXHRcXHRcXHRoZWlnaHQ6IDEwcHg7XFxuXFx0XFx0XFx0XFx0Ym9yZGVyLXJhZGl1czogNTAlO1xcblxcdFxcdFxcdFxcdGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcXG5cXHRcXHRcXHRcXHRwb2ludGVyLWV2ZW50czogbm9uZTtcXG5cXHRcXHRcXHRcXHQmLmFjdGl2ZSB7XFxuXFx0XFx0XFx0XFx0XFx0YmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAxKTtcXG5cXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0XFx0Jjpub3QoOmxhc3QtY2hpbGQpIHtcXG5cXHRcXHRcXHRcXHRcXHQvLyBtYXJnaW4tcmlnaHQ6IDE1cHg7XFxuXFx0XFx0XFx0XFx0fVxcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFxuXFx0fVxcbn1cXG4vKiBFTkQgLSBDYXJvdXNlbCBGdWxsIFdpZHRoICovXFxuXFxuXFxuXFxuLyogU1RBUlQgLSBTUVVBUkUgQ2Fyb3VzZWwgKi8gXFxuLy8gI2Nhcm91c2VsLWhvbWUge1xcbi8vIFxcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4vLyBcXHRyaWdodDogMzZweDtcXG4vLyBcXHRib3R0b206IDE2cHg7XFxuLy8gXFx0d2lkdGg6IDM2MHB4O1xcbi8vIFxcdGhlaWdodDogODZweDtcXG4vLyBcXHRvdmVyZmxvdzogaGlkZGVuO1xcbi8vIFxcdG1hcmdpbjogMCBhdXRvO1xcbi8vIFxcdC8vIGRpc3BsYXk6IGJsb2NrO1xcbi8vIFxcdGRpc3BsYXk6IGZsZXg7XFxuLy8gXFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cXG4vLyBcXHR1bC5nbGlkZV9fc2xpZGVzIHtcXG4vLyBcXHRcXHRkaXNwbGF5OiBmbGV4O1xcbi8vIFxcdFxcdGxpc3Qtc3R5bGU6IG5vbmU7XFxuLy8gXFx0fVxcblxcbi8vIFxcdGxpLmdsaWRlX19zbGlkZSB7XFxuLy8gXFx0XFx0cG9zaXRpb246IHJlbGF0aXZlO1xcbi8vIFxcdFxcdGN1cnNvcjogcG9pbnRlcjtcXG4vLyBcXHRcXHQmOmhvdmVyIGltZy5zbGlkZS1pbWcge1xcbi8vIFxcdFxcdFxcdGZpbHRlcjogY29udHJhc3QoMTIwJSk7XFxuLy8gXFx0XFx0fVxcbi8vIFxcdFxcdCY6aG92ZXIgaW1nLnNsaWRlLXRpdGxlIHtcXG4vLyBcXHRcXHRcXHR0cmFuc2Zvcm06IHNjYWxlKDEuMik7XFxuLy8gXFx0XFx0fVxcblxcbi8vIFxcdFxcdCYuZ2xpZGVfX3NsaWRlLS1hY3RpdmUge1xcbi8vIFxcdFxcdFxcdC8vIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4vLyBcXHRcXHRcXHQvLyB0cmFuc2Zvcm06IHNjYWxlKDEuMik7XFxuLy8gXFx0XFx0XFx0Ly8gbWFyZ2luOiAwIDE1cHggIWltcG9ydGFudDtcXG4vLyBcXHRcXHR9XFxuLy8gXFx0fVxcblxcbi8vIFxcdGltZyB7XFxuLy8gXFx0XFx0Ly8gcG9zaXRpb246IGFic29sdXRlO1xcbi8vIFxcdFxcdGRpc3BsYXk6IGJsb2NrO1xcbi8vIFxcdFxcdGhlaWdodDogYXV0bztcXG4vLyBcXHRcXHR3aWR0aDogMTAwJTtcXG4vLyBcXHRcXHRtYXJnaW46IGF1dG87XFxuLy8gXFx0XFx0Ly8gbWF4LXdpZHRoOiAzNjBweDtcXG4vLyBcXHRcXHR6LWluZGV4OiAxO1xcbi8vIFxcdFxcdHRyYW5zaXRpb246IGFsbCAyMDBtcyBlYXNlLWluLW91dDtcXG4vLyBcXHRcXHRwb2ludGVyLWV2ZW50czogbm9uZSAhaW1wb3J0YW50O1xcbi8vIFxcdFxcdHVzZXItc2VsZWN0OiBub25lO1xcbi8vIFxcdFxcdCY6aG92ZXIge1xcbi8vIFxcdFxcdFxcdGZpbHRlcjogY29udHJhc3QoMTIwJSk7XFxuLy8gXFx0XFx0fVxcbi8vIFxcdH1cXG5cXG5cXG4vLyBcXHQuZ2xpZGVfX2Fycm93cyB7XFxuLy8gXFx0XFx0Ly8gcG9zaXRpb246IGFic29sdXRlO1xcbi8vIFxcdFxcdC8vIHRvcDogODBweDtcXG4vLyBcXHRcXHQvLyB1c2VyLXNlbGVjdDogbm9uZTtcXG4vLyBcXHRcXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuLy8gXFx0XFx0bGVmdDogNDBweDtcXG4vLyBcXHRcXHRib3R0b206IDE1cHg7XFxuLy8gXFx0XFx0d2lkdGg6IGZpdC1jb250ZW50O1xcbi8vICAgICBoZWlnaHQ6IDUwcHg7XFxuLy8gXFx0XFx0ZGlzcGxheTogZmxleDtcXG4vLyBcXHRcXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4vLyBcXHRcXHRhbGlnbi1pdGVtczogY2VudGVyO1xcbi8vIFxcdFxcdHVzZXItc2VsZWN0OiBub25lO1xcblxcbi8vIFxcdFxcdC5nbGlkZV9fYXJyb3dzLWNvbnRhaW5lciB7XFxuLy8gXFx0XFx0XFx0cG9zaXRpb246IHJlbGF0aXZlO1xcbi8vIFxcdFxcdFxcdHdpZHRoOiAxMDAlO1xcbi8vIFxcdFxcdFxcdGhlaWdodDogMTAwJTtcXG4vLyBcXHRcXHRcXHRkaXNwbGF5OiBmbGV4O1xcbi8vIFxcdFxcdFxcdGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbi8vIFxcdFxcdFxcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuLy8gICAgXFx0XFx0Ly8gaGVpZ2h0OiAxMDAlO1xcbi8vIFxcdFxcdH1cXG5cXG4vLyBcXHRcXHRidXR0b24uZ2xpZGVfX2Fycm93IHtcXG4vLyBcXHRcXHRcXHRkaXNwbGF5OiBmbGV4O1xcbi8vIFxcdFxcdFxcdGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbi8vIFxcdFxcdFxcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuLy8gXFx0XFx0XFx0Ly8gcG9zaXRpb246IGFic29sdXRlO1xcbi8vIFxcdFxcdFxcdHotaW5kZXg6IDk5O1xcbi8vIFxcdFxcdFxcdGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMSkgIWltcG9ydGFudDtcXG4vLyBcXHRcXHRcXHRib3JkZXI6IG5vbmU7XFxuLy8gXFx0XFx0XFx0aGVpZ2h0OiAzNnB4O1xcbi8vIFxcdFxcdFxcdHdpZHRoOiAzNnB4O1xcbi8vIFxcdFxcdFxcdHBhZGRpbmc6IDEwcHg7XFxuLy8gXFx0XFx0XFx0Ym9yZGVyLXJhZGl1czogNXB4ICFpbXBvcnRhbnQ7XFxuLy8gXFx0XFx0XFx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIDEyMG1zIGVhc2UtaW4tb3V0O1xcblxcbi8vIFxcdFxcdFxcdGltZyB7XFxuLy8gXFx0XFx0XFx0XFx0aGVpZ2h0OiAxMDAlO1xcbi8vIFxcdFxcdFxcdFxcdG1hcmdpbjogMDtcXG4vLyBcXHRcXHRcXHR9XFxuXFxuLy8gXFx0XFx0XFx0Jjpob3ZlciB7XFxuLy8gXFx0XFx0XFx0XFx0Y3Vyc29yOiBwb2ludGVyO1xcbi8vIFxcdFxcdFxcdFxcdHRyYW5zZm9ybTogc2NhbGUoMS4xKTtcXG4vLyBcXHRcXHRcXHR9XFxuXFxuLy8gXFx0XFx0XFx0Ji0tbGVmdCB7XFxuLy8gXFx0XFx0XFx0XFx0cG9zaXRpb246IGFic29sdXRlO1xcbi8vIFxcdFxcdFxcdFxcdHRvcDogM3B4O1xcbi8vIFxcdFxcdFxcdFxcdGxlZnQ6IC00MHB4O1xcbi8vIFxcdFxcdFxcdFxcdGltZyB7XFxuLy8gXFx0XFx0XFx0XFx0XFx0Ly8gcG9zaXRpb246IHJlbGF0aXZlO1xcbi8vIFxcdFxcdFxcdFxcdFxcdC8vIHJpZ2h0OiAycHg7XFxuLy8gXFx0XFx0XFx0XFx0fVxcbi8vIFxcdFxcdFxcdH1cXG4vLyBcXHRcXHRcXHQmLS1yaWdodCB7XFxuLy8gXFx0XFx0XFx0XFx0cG9zaXRpb246IGFic29sdXRlO1xcbi8vIFxcdFxcdFxcdFxcdHRvcDogM3B4O1xcbi8vIFxcdFxcdFxcdFxcdHJpZ2h0OiAtMzIwcHg7XFxuLy8gXFx0XFx0XFx0XFx0aW1nIHtcXG4vLyBcXHRcXHRcXHRcXHRcXHQvLyBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4vLyBcXHRcXHRcXHRcXHRcXHQvLyBwb3NpdGlvbjogcmVsYXRpdmU7XFxuLy8gXFx0XFx0XFx0XFx0XFx0Ly8gbGVmdDogM3B4O1xcbi8vIFxcdFxcdFxcdFxcdH1cXG4vLyBcXHRcXHRcXHR9XFxuLy8gXFx0XFx0fVxcblxcbi8vIFxcdFxcdGRpdi5kb3QtYnV0dG9uIHtcXG4vLyBcXHRcXHRcXHRwYWRkaW5nOiAxMHB4O1xcbi8vIFxcdFxcdFxcdGN1cnNvcjogcG9pbnRlcjtcXG5cXG4vLyBcXHRcXHRcXHRkaXYuZG90IHtcXG4vLyBcXHRcXHRcXHRcXHRib3gtc2hhZG93OiAwIDRweCA1cHggLTJweCByZ2IoMTM0LCAxMzQsIDEzNCk7XFxuLy8gXFx0XFx0XFx0XFx0d2lkdGg6IDEwcHg7XFxuLy8gXFx0XFx0XFx0XFx0aGVpZ2h0OiAxMHB4O1xcbi8vIFxcdFxcdFxcdFxcdGJvcmRlci1yYWRpdXM6IDUwJTtcXG4vLyBcXHRcXHRcXHRcXHRiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XFxuLy8gXFx0XFx0XFx0XFx0cG9pbnRlci1ldmVudHM6IG5vbmU7XFxuLy8gXFx0XFx0XFx0XFx0Ji5hY3RpdmUge1xcbi8vIFxcdFxcdFxcdFxcdFxcdGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMSk7XFxuLy8gXFx0XFx0XFx0XFx0fVxcbi8vIFxcdFxcdFxcdFxcdCY6bm90KDpsYXN0LWNoaWxkKSB7XFxuLy8gXFx0XFx0XFx0XFx0XFx0Ly8gbWFyZ2luLXJpZ2h0OiAxNXB4O1xcbi8vIFxcdFxcdFxcdFxcdH1cXG4vLyBcXHRcXHRcXHR9XFxuLy8gXFx0XFx0fVxcblxcbi8vIFxcdH1cXG4vLyB9XFxuLyogRU5EIC0gQ2Fyb3VzZWwgSG9tZSAqL1xcblxcblxcblxcblxcbkAtd2Via2l0LWtleWZyYW1lcyBjdXN0b21QdWxzYXRlIHtcXG4gIDAlIHtcXG5cXHRcXHR0cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgfVxcblxcdDUwJSB7XFxuXFx0XFx0dHJhbnNmb3JtOiBzY2FsZSgxLjQpO1xcbiAgfVxcblxcdDEwMCUge1xcblxcdFxcdHRyYW5zZm9ybTogc2NhbGUoMSk7XFxuICB9XFxufVwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///646\n')},645:module=>{eval('\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item);\n\n if (item[2]) {\n return "@media ".concat(item[2], " {").concat(content, "}");\n }\n\n return content;\n }).join("");\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === "string") {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, ""]];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = "".concat(mediaQuery, " and ").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzPzI0ZmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7O0FBRWhCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDRDQUE0QyxxQkFBcUI7QUFDakU7O0FBRUE7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EscUJBQXFCLGlCQUFpQjtBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLHFCQUFxQjtBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6IjY0NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuLy8gY3NzIGJhc2UgY29kZSwgaW5qZWN0ZWQgYnkgdGhlIGNzcy1sb2FkZXJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107IC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblxuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSk7XG5cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIHJldHVybiBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKS5jb25jYXQoY29udGVudCwgXCJ9XCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9OyAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXG5cbiAgbGlzdC5pID0gZnVuY3Rpb24gKG1vZHVsZXMsIG1lZGlhUXVlcnksIGRlZHVwZSkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCBcIlwiXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICAgICAgdmFyIGlkID0gdGhpc1tpXVswXTtcblxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBtb2R1bGVzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfaV0pO1xuXG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRpbnVlXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobWVkaWFRdWVyeSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWFRdWVyeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzJdID0gXCJcIi5jb25jYXQobWVkaWFRdWVyeSwgXCIgYW5kIFwiKS5jb25jYXQoaXRlbVsyXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbGlzdDtcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///645\n')},15:module=>{eval('\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nmodule.exports = function cssWithMappingToString(item) {\n var _item = _slicedToArray(item, 4),\n content = _item[1],\n cssMapping = _item[3];\n\n if (typeof btoa === "function") {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);\n var sourceMapping = "/*# ".concat(data, " */");\n var sourceURLs = cssMapping.sources.map(function (source) {\n return "/*# sourceURL=".concat(cssMapping.sourceRoot || "").concat(source, " */");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join("\\n");\n }\n\n return [content].join("\\n");\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qcz83NWU5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLGlDQUFpQywySEFBMkg7O0FBRTVKLDZCQUE2QixrS0FBa0s7O0FBRS9MLGlEQUFpRCxnQkFBZ0IsZ0VBQWdFLHdEQUF3RCw2REFBNkQsc0RBQXNELGtIQUFrSDs7QUFFOVosc0NBQXNDLHVEQUF1RCx1Q0FBdUMsU0FBUyxPQUFPLGtCQUFrQixFQUFFLGFBQWE7O0FBRXJMLHdDQUF3QyxnRkFBZ0YsZUFBZSxlQUFlLGdCQUFnQixvQkFBb0IsTUFBTSwwQ0FBMEMsK0JBQStCLGFBQWEscUJBQXFCLG1DQUFtQyxFQUFFLEVBQUUsY0FBYyxXQUFXLFVBQVUsRUFBRSxVQUFVLE1BQU0saURBQWlELEVBQUUsVUFBVSxrQkFBa0IsRUFBRSxFQUFFLGFBQWE7O0FBRXZlLCtCQUErQixvQ0FBb0M7O0FBRW5FO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxjQUFjO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0EiLCJmaWxlIjoiMTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgIShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pIHtcbiAgdmFyIF9pdGVtID0gX3NsaWNlZFRvQXJyYXkoaXRlbSwgNCksXG4gICAgICBjb250ZW50ID0gX2l0ZW1bMV0sXG4gICAgICBjc3NNYXBwaW5nID0gX2l0ZW1bM107XG5cbiAgaWYgKHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICB2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoY3NzTWFwcGluZykpKSk7XG4gICAgdmFyIGRhdGEgPSBcInNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFwiLmNvbmNhdChiYXNlNjQpO1xuICAgIHZhciBzb3VyY2VNYXBwaW5nID0gXCIvKiMgXCIuY29uY2F0KGRhdGEsIFwiICovXCIpO1xuICAgIHZhciBzb3VyY2VVUkxzID0gY3NzTWFwcGluZy5zb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gXCIvKiMgc291cmNlVVJMPVwiLmNvbmNhdChjc3NNYXBwaW5nLnNvdXJjZVJvb3QgfHwgXCJcIikuY29uY2F0KHNvdXJjZSwgXCIgKi9cIik7XG4gICAgfSk7XG4gICAgcmV0dXJuIFtjb250ZW50XS5jb25jYXQoc291cmNlVVJMcykuY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbihcIlxcblwiKTtcbiAgfVxuXG4gIHJldHVybiBbY29udGVudF0uam9pbihcIlxcblwiKTtcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///15\n')}},__webpack_module_cache__={};function __webpack_require__(Q){if(__webpack_module_cache__[Q])return __webpack_module_cache__[Q].exports;var F=__webpack_module_cache__[Q]={id:Q,exports:{}};return __webpack_modules__[Q](F,F.exports,__webpack_require__),F.exports}__webpack_require__.n=Q=>{var F=Q&&Q.__esModule?()=>Q.default:()=>Q;return __webpack_require__.d(F,{a:F}),F},__webpack_require__.d=(Q,F)=>{for(var B in F)__webpack_require__.o(F,B)&&!__webpack_require__.o(Q,B)&&Object.defineProperty(Q,B,{enumerable:!0,get:F[B]})},__webpack_require__.o=(Q,F)=>Object.prototype.hasOwnProperty.call(Q,F),__webpack_require__.r=Q=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(Q,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(Q,"__esModule",{value:!0})};var __webpack_exports__=__webpack_require__(969);return __webpack_exports__=__webpack_exports__.default,__webpack_exports__})()}));