/* * ATTENTION: An "eval-source-map" devtool has been used. * This devtool is neither made for production nor for readable output files. * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) * or disable the default devtool with "devtool: false". * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else { var a = factory(); for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; } })(self, function() { return /******/ (function() { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ "./libs/bootstrap-maxlength/bootstrap-maxlength.js": /*!*********************************************************!*\ !*** ./libs/bootstrap-maxlength/bootstrap-maxlength.js ***! \*********************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var bootstrap_maxlength_src_bootstrap_maxlength__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bootstrap-maxlength/src/bootstrap-maxlength */ "./node_modules/bootstrap-maxlength/src/bootstrap-maxlength.js"); /* harmony import */ var bootstrap_maxlength_src_bootstrap_maxlength__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(bootstrap_maxlength_src_bootstrap_maxlength__WEBPACK_IMPORTED_MODULE_0__); /***/ }), /***/ "./node_modules/bootstrap-maxlength/src/bootstrap-maxlength.js": /*!*********************************************************************!*\ !*** ./node_modules/bootstrap-maxlength/src/bootstrap-maxlength.js ***! \*********************************************************************/ /***/ (function() { eval("/* ==========================================================\n * bootstrap-maxlength.js v1.10.0\n *\n * Copyright (c) 2013-2021 Maurizio Napoleoni;\n *\n * Licensed under the terms of the MIT license.\n * See: https://github.com/mimo84/bootstrap-maxlength/blob/master/LICENSE\n * ========================================================== */\n/*global jQuery*/\n\n(function ($) {\n 'use strict';\n /**\n * We need an event when the elements are destroyed\n * because if an input is removed, we have to remove the\n * maxlength object associated (if any).\n * From:\n * http://stackoverflow.com/questions/2200494/jquery-trigger-event-when-an-element-is-removed-from-the-dom\n */\n if (!$.event.special.destroyed) {\n $.event.special.destroyed = {\n remove: function (o) {\n if (o.handler) {\n o.handler();\n }\n }\n };\n }\n\n\n $.fn.extend({\n maxlength: function (options, callback) {\n var documentBody = $('body'),\n defaults = {\n showOnReady: false, // true to always show when indicator is ready\n alwaysShow: true, // if true the indicator it's always shown.\n threshold: 0, // Represents how many chars left are needed to show up the counter\n warningClass: 'small form-text text-muted',\n limitReachedClass: 'small form-text text-danger',\n limitExceededClass: '',\n separator: ' / ',\n preText: '',\n postText: '',\n showMaxLength: true,\n placement: 'bottom-right-inside',\n message: null, // an alternative way to provide the message text\n showCharsTyped: true, // show the number of characters typed and not the number of characters remaining\n validate: false, // if the browser doesn't support the maxlength attribute, attempt to type more than the indicated chars, will be prevented.\n utf8: false, // counts using bytesize rather than length. eg: '£' is counted as 2 characters.\n appendToParent: false, // append the indicator to the input field's parent instead of body\n twoCharLinebreak: true, // count linebreak as 2 characters to match IE/Chrome textarea validation. As well as DB storage.\n customMaxAttribute: null, // null = use maxlength attribute and browser functionality, string = use specified attribute instead.\n customMaxClass: 'overmax', // Class to add to the input field when the maxlength is exceeded.\n allowOverMax: false, // Form submit validation is handled on your own. when maxlength has been exceeded 'overmax' class added to element\n zIndex: 1099\n };\n\n if ($.isFunction(options) && !callback) {\n callback = options;\n options = {};\n }\n options = $.extend(defaults, options);\n\n\n /**\n * Return the byte count of the specified character in UTF8 encoding.\n * Note: This won't cover UTF-8 characters that are 4 bytes long.\n *\n * @param input\n * @return {number}\n */\n function utf8CharByteCount(character) {\n var c = character.charCodeAt();\n // Not c then 0, else c < 128 then 1, else c < 2048 then 2, else 3\n return !c ? 0 : c < 128 ? 1 : c < 2048 ? 2 : 3;\n }\n\n /**\n * Return the length of the specified input in UTF8 encoding.\n *\n * @param input\n * @return {number}\n */\n function utf8Length(string) {\n return string.split(\"\")\n .map(utf8CharByteCount)\n // Prevent reduce from throwing an error if the string is empty.\n .concat(0)\n .reduce(function (sum, val) {\n return sum + val;\n });\n }\n\n /**\n * Return the length of the specified input.\n *\n * @param input\n * @return {number}\n */\n function inputLength(input) {\n var text = input.val();\n\n if (options.twoCharLinebreak) {\n // Count all line breaks as 2 characters\n text = text.replace(/\\r(?!\\n)|\\n(?!\\r)/g, '\\r\\n');\n } else {\n // Remove all double-character (\\r\\n) linebreaks, so they're counted only once.\n text = text.replace(/(?:\\r\\n|\\r|\\n)/g, '\\n');\n }\n\n var currentLength = 0;\n\n if (options.utf8) {\n currentLength = utf8Length(text);\n } else {\n currentLength = text.length;\n }\n\n // Remove \"C:\\fakepath\\\" from counter when using file input\n // Fix https://github.com/mimo84/bootstrap-maxlength/issues/146\n if (input.prop(\"type\") === \"file\" && input.val() !== \"\") {\n currentLength -= 12;\n }\n\n return currentLength;\n }\n\n /**\n * Truncate the text of the specified input.\n *\n * @param input\n * @param limit\n */\n function truncateChars(input, maxlength) {\n var text = input.val();\n\n if (options.twoCharLinebreak) {\n text = text.replace(/\\r(?!\\n)|\\n(?!\\r)/g, '\\r\\n');\n\n if (text[text.length - 1] === '\\n') {\n maxlength -= text.length % 2;\n }\n }\n\n if (options.utf8) {\n var indexedSize = text.split(\"\").map(utf8CharByteCount);\n for (\n var removedBytes = 0,\n bytesPastMax = utf8Length(text) - maxlength; removedBytes < bytesPastMax; removedBytes += indexedSize.pop()\n );\n maxlength -= (maxlength - indexedSize.length);\n }\n\n input.val(text.substr(0, maxlength));\n }\n\n /**\n * Return true if the indicator should be showing up.\n *\n * @param input\n * @param threshold\n * @param maxlength\n * @return {number}\n */\n function charsLeftThreshold(input, threshold, maxlength) {\n var output = true;\n if (!options.alwaysShow && (maxlength - inputLength(input) > threshold)) {\n output = false;\n }\n return output;\n }\n\n /**\n * Returns how many chars are left to complete the fill up of the form.\n *\n * @param input\n * @param maxlength\n * @return {number}\n */\n function remainingChars(input, maxlength) {\n var length = maxlength - inputLength(input);\n return length;\n }\n\n /**\n * When called displays the indicator.\n *\n * @param indicator\n */\n function showRemaining(currentInput, indicator) {\n indicator.css({\n display: 'block'\n });\n currentInput.trigger('maxlength.shown');\n }\n\n /**\n * When called shows the indicator.\n *\n * @param indicator\n */\n function hideRemaining(currentInput, indicator) {\n\n if (options.alwaysShow) {\n return;\n }\n\n indicator.css({\n display: 'none'\n });\n currentInput.trigger('maxlength.hidden');\n }\n\n /**\n * This function updates the value in the indicator\n *\n * @param maxLengthThisInput\n * @param typedChars\n * @return String\n */\n function updateMaxLengthHTML(currentInputText, maxLengthThisInput, typedChars) {\n var output = '';\n if (options.message) {\n if (typeof options.message === 'function') {\n output = options.message(currentInputText, maxLengthThisInput);\n } else {\n output = options.message.replace('%charsTyped%', typedChars)\n .replace('%charsRemaining%', maxLengthThisInput - typedChars)\n .replace('%charsTotal%', maxLengthThisInput);\n }\n } else {\n if (options.preText) {\n output += options.preText;\n }\n if (!options.showCharsTyped) {\n output += maxLengthThisInput - typedChars;\n } else {\n output += typedChars;\n }\n if (options.showMaxLength) {\n output += options.separator + maxLengthThisInput;\n }\n if (options.postText) {\n output += options.postText;\n }\n }\n return output;\n }\n\n /**\n * This function updates the value of the counter in the indicator.\n * Wants as parameters: the number of remaining chars, the element currently managed,\n * the maxLength for the current input and the indicator generated for it.\n *\n * @param remaining\n * @param currentInput\n * @param maxLengthCurrentInput\n * @param maxLengthIndicator\n */\n function manageRemainingVisibility(remaining, currentInput, maxLengthCurrentInput, maxLengthIndicator) {\n if (maxLengthIndicator) {\n maxLengthIndicator.html(updateMaxLengthHTML(currentInput.val(), maxLengthCurrentInput, (maxLengthCurrentInput - remaining)));\n\n if (remaining > 0) {\n if (charsLeftThreshold(currentInput, options.threshold, maxLengthCurrentInput)) {\n showRemaining(currentInput, maxLengthIndicator.removeClass(options.limitReachedClass + ' ' + options.limitExceededClass).addClass(options.warningClass));\n } else {\n hideRemaining(currentInput, maxLengthIndicator);\n }\n } else {\n if (!options.limitExceededClass) {\n showRemaining(currentInput, maxLengthIndicator.removeClass(options.warningClass).addClass(options.limitReachedClass));\n } else {\n if (remaining === 0) {\n showRemaining(currentInput, maxLengthIndicator.removeClass(options.warningClass + ' ' + options.limitExceededClass).addClass(options.limitReachedClass));\n } else {\n showRemaining(currentInput, maxLengthIndicator.removeClass(options.warningClass + ' ' + options.limitReachedClass).addClass(options.limitExceededClass));\n }\n }\n }\n }\n\n if (options.customMaxAttribute) {\n // class to use for form validation on custom maxlength attribute\n if (remaining < 0) {\n currentInput.addClass(options.customMaxClass);\n } else {\n currentInput.removeClass(options.customMaxClass);\n }\n }\n }\n\n /**\n * This function returns an object containing all the\n * informations about the position of the current input\n *\n * @param currentInput\n * @return object {bottom height left right top width}\n *\n */\n function getPosition(currentInput) {\n var el = currentInput[0];\n return $.extend({}, (typeof el.getBoundingClientRect === 'function') ? el.getBoundingClientRect() : {\n width: el.offsetWidth,\n height: el.offsetHeight\n }, currentInput.offset());\n }\n\n /**\n * This function places the maxLengthIndicator based on placement config object.\n *\n * @param {object} placement\n * @param {$} maxLengthIndicator\n * @return null\n *\n */\n function placeWithCSS(placement, maxLengthIndicator) {\n if (!placement || !maxLengthIndicator) {\n return;\n }\n\n var POSITION_KEYS = [\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'position'\n ];\n\n var cssPos = {};\n\n // filter css properties to position\n $.each(POSITION_KEYS, function (i, key) {\n var val = options.placement[key];\n if (typeof val !== 'undefined') {\n cssPos[key] = val;\n }\n });\n\n maxLengthIndicator.css(cssPos);\n\n return;\n }\n\n\n /**\n * This function places the maxLengthIndicator at the\n * top / bottom / left / right of the currentInput\n *\n * @param currentInput\n * @param maxLengthIndicator\n * @return null\n *\n */\n function place(currentInput, maxLengthIndicator) {\n var pos = getPosition(currentInput);\n\n // Supports custom placement handler\n if ($.type(options.placement) === 'function') {\n options.placement(currentInput, maxLengthIndicator, pos);\n return;\n }\n\n // Supports custom placement via css positional properties\n if ($.isPlainObject(options.placement)) {\n placeWithCSS(options.placement, maxLengthIndicator);\n return;\n }\n\n var inputOuter = currentInput.outerWidth(),\n outerWidth = maxLengthIndicator.outerWidth(),\n actualWidth = maxLengthIndicator.width(),\n actualHeight = maxLengthIndicator.height();\n\n // get the right position if the indicator is appended to the input's parent\n if (options.appendToParent) {\n pos.top -= currentInput.parent().offset().top;\n pos.left -= currentInput.parent().offset().left;\n }\n\n switch (options.placement) {\n case 'bottom':\n maxLengthIndicator.css({\n top: pos.top + pos.height,\n left: pos.left + pos.width / 2 - actualWidth / 2\n });\n break;\n case 'top':\n maxLengthIndicator.css({\n top: pos.top - actualHeight,\n left: pos.left + pos.width / 2 - actualWidth / 2\n });\n break;\n case 'left':\n maxLengthIndicator.css({\n top: pos.top + pos.height / 2 - actualHeight / 2,\n left: pos.left - actualWidth\n });\n break;\n case 'right':\n maxLengthIndicator.css({\n top: pos.top + pos.height / 2 - actualHeight / 2,\n left: pos.left + pos.width\n });\n break;\n case 'bottom-right':\n maxLengthIndicator.css({\n top: pos.top + pos.height,\n left: pos.left + pos.width\n });\n break;\n case 'top-right':\n maxLengthIndicator.css({\n top: pos.top - actualHeight,\n left: pos.left + inputOuter\n });\n break;\n case 'top-left':\n maxLengthIndicator.css({\n top: pos.top - actualHeight,\n left: pos.left - outerWidth\n });\n break;\n case 'bottom-left':\n maxLengthIndicator.css({\n top: pos.top + currentInput.outerHeight(),\n left: pos.left - outerWidth\n });\n break;\n case 'centered-right':\n maxLengthIndicator.css({\n top: pos.top + (actualHeight / 2),\n left: pos.left + inputOuter - outerWidth - 3\n });\n break;\n\n // Some more options for placements\n case 'bottom-right-inside':\n maxLengthIndicator.css({\n top: pos.top + pos.height,\n left: pos.left + pos.width - outerWidth\n });\n break;\n case 'top-right-inside':\n maxLengthIndicator.css({\n top: pos.top - actualHeight,\n left: pos.left + inputOuter - outerWidth\n });\n break;\n case 'top-left-inside':\n maxLengthIndicator.css({\n top: pos.top - actualHeight,\n left: pos.left\n });\n break;\n case 'bottom-left-inside':\n maxLengthIndicator.css({\n top: pos.top + currentInput.outerHeight(),\n left: pos.left\n });\n break;\n }\n }\n\n /**\n * This function returns true if the indicator position needs to\n * be recalculated when the currentInput changes\n *\n * @return {boolean}\n *\n */\n function isPlacementMutable() {\n return options.placement === 'bottom-right-inside' || options.placement === 'top-right-inside' || typeof options.placement === 'function' || (options.message && typeof options.message === 'function');\n }\n\n /**\n * This function retrieves the maximum length of currentInput\n *\n * @param currentInput\n * @return {number}\n *\n */\n function getMaxLength(currentInput) {\n var max = currentInput.attr('maxlength') || options.customMaxAttribute;\n\n if (options.customMaxAttribute && !options.allowOverMax) {\n var custom = currentInput.attr(options.customMaxAttribute);\n if (!max || custom < max) {\n max = custom;\n }\n }\n\n if (!max) {\n max = currentInput.attr('size');\n }\n return max;\n }\n\n return this.each(function () {\n\n var currentInput = $(this),\n maxLengthCurrentInput,\n maxLengthIndicator;\n\n $(window).resize(function () {\n if (maxLengthIndicator) {\n place(currentInput, maxLengthIndicator);\n }\n });\n\n function firstInit() {\n var maxlengthContent = updateMaxLengthHTML(currentInput.val(), maxLengthCurrentInput, '0');\n maxLengthCurrentInput = getMaxLength(currentInput);\n\n if (!maxLengthIndicator) {\n maxLengthIndicator = $('').css({\n display: 'none',\n position: 'absolute',\n whiteSpace: 'nowrap',\n zIndex: options.zIndex\n }).html(maxlengthContent);\n }\n\n // We need to detect resizes if we are dealing with a textarea:\n if (currentInput.is('textarea')) {\n currentInput.data('maxlenghtsizex', currentInput.outerWidth());\n currentInput.data('maxlenghtsizey', currentInput.outerHeight());\n\n currentInput.mouseup(function () {\n if (currentInput.outerWidth() !== currentInput.data('maxlenghtsizex') || currentInput.outerHeight() !== currentInput.data('maxlenghtsizey')) {\n place(currentInput, maxLengthIndicator);\n }\n\n currentInput.data('maxlenghtsizex', currentInput.outerWidth());\n currentInput.data('maxlenghtsizey', currentInput.outerHeight());\n });\n }\n\n if (options.appendToParent) {\n currentInput.parent().append(maxLengthIndicator);\n currentInput.parent().css('position', 'relative');\n } else {\n documentBody.append(maxLengthIndicator);\n }\n\n var remaining = remainingChars(currentInput, getMaxLength(currentInput));\n manageRemainingVisibility(remaining, currentInput, maxLengthCurrentInput, maxLengthIndicator);\n place(currentInput, maxLengthIndicator);\n }\n\n if (options.showOnReady) {\n currentInput.ready(function () {\n firstInit();\n });\n } else {\n currentInput.focus(function () {\n firstInit();\n });\n }\n\n currentInput.on('maxlength.reposition', function () {\n place(currentInput, maxLengthIndicator);\n });\n\n\n currentInput.on('destroyed', function () {\n if (maxLengthIndicator) {\n maxLengthIndicator.remove();\n }\n });\n\n currentInput.on('blur', function () {\n if (maxLengthIndicator && !options.showOnReady) {\n maxLengthIndicator.remove();\n }\n });\n\n currentInput.on('input', function () {\n var maxlength = getMaxLength(currentInput),\n remaining = remainingChars(currentInput, maxlength),\n output = true;\n\n if (options.validate && remaining < 0) {\n truncateChars(currentInput, maxlength);\n output = false;\n } else {\n manageRemainingVisibility(remaining, currentInput, maxLengthCurrentInput, maxLengthIndicator);\n }\n\n // if (isPlacementMutable()) {\n // place(currentInput, maxLengthIndicator);\n // }\n\n return output;\n });\n });\n }\n });\n}(jQuery));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwLW1heGxlbmd0aC9zcmMvYm9vdHN0cmFwLW1heGxlbmd0aC5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQsNkJBQTZCO0FBQ3RGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFFBQVE7QUFDekIsaUJBQWlCLEdBQUc7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFVBQVU7QUFDVjtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0gsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL1Z1ZXh5Ly4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC1tYXhsZW5ndGgvc3JjL2Jvb3RzdHJhcC1tYXhsZW5ndGguanM/MzIxZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBib290c3RyYXAtbWF4bGVuZ3RoLmpzIHYxLjEwLjBcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAyMSBNYXVyaXppbyBOYXBvbGVvbmk7XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgbGljZW5zZS5cbiAqIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL21pbW84NC9ib290c3RyYXAtbWF4bGVuZ3RoL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qZ2xvYmFsICBqUXVlcnkqL1xuXG4oZnVuY3Rpb24gKCQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICAvKipcbiAgICogV2UgbmVlZCBhbiBldmVudCB3aGVuIHRoZSBlbGVtZW50cyBhcmUgZGVzdHJveWVkXG4gICAqIGJlY2F1c2UgaWYgYW4gaW5wdXQgaXMgcmVtb3ZlZCwgd2UgaGF2ZSB0byByZW1vdmUgdGhlXG4gICAqIG1heGxlbmd0aCBvYmplY3QgYXNzb2NpYXRlZCAoaWYgYW55KS5cbiAgICogRnJvbTpcbiAgICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMjAwNDk0L2pxdWVyeS10cmlnZ2VyLWV2ZW50LXdoZW4tYW4tZWxlbWVudC1pcy1yZW1vdmVkLWZyb20tdGhlLWRvbVxuICAgKi9cbiAgaWYgKCEkLmV2ZW50LnNwZWNpYWwuZGVzdHJveWVkKSB7XG4gICAgJC5ldmVudC5zcGVjaWFsLmRlc3Ryb3llZCA9IHtcbiAgICAgIHJlbW92ZTogZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgaWYgKG8uaGFuZGxlcikge1xuICAgICAgICAgIG8uaGFuZGxlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG5cbiAgJC5mbi5leHRlbmQoe1xuICAgIG1heGxlbmd0aDogZnVuY3Rpb24gKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgZG9jdW1lbnRCb2R5ID0gJCgnYm9keScpLFxuICAgICAgICBkZWZhdWx0cyA9IHtcbiAgICAgICAgICBzaG93T25SZWFkeTogZmFsc2UsIC8vIHRydWUgdG8gYWx3YXlzIHNob3cgd2hlbiBpbmRpY2F0b3IgaXMgcmVhZHlcbiAgICAgICAgICBhbHdheXNTaG93OiB0cnVlLCAvLyBpZiB0cnVlIHRoZSBpbmRpY2F0b3IgaXQncyBhbHdheXMgc2hvd24uXG4gICAgICAgICAgdGhyZXNob2xkOiAwLCAvLyBSZXByZXNlbnRzIGhvdyBtYW55IGNoYXJzIGxlZnQgYXJlIG5lZWRlZCB0byBzaG93IHVwIHRoZSBjb3VudGVyXG4gICAgICAgICAgd2FybmluZ0NsYXNzOiAnc21hbGwgZm9ybS10ZXh0IHRleHQtbXV0ZWQnLFxuICAgICAgICAgIGxpbWl0UmVhY2hlZENsYXNzOiAnc21hbGwgZm9ybS10ZXh0IHRleHQtZGFuZ2VyJyxcbiAgICAgICAgICBsaW1pdEV4Y2VlZGVkQ2xhc3M6ICcnLFxuICAgICAgICAgIHNlcGFyYXRvcjogJyAvICcsXG4gICAgICAgICAgcHJlVGV4dDogJycsXG4gICAgICAgICAgcG9zdFRleHQ6ICcnLFxuICAgICAgICAgIHNob3dNYXhMZW5ndGg6IHRydWUsXG4gICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tLXJpZ2h0LWluc2lkZScsXG4gICAgICAgICAgbWVzc2FnZTogbnVsbCwgLy8gYW4gYWx0ZXJuYXRpdmUgd2F5IHRvIHByb3ZpZGUgdGhlIG1lc3NhZ2UgdGV4dFxuICAgICAgICAgIHNob3dDaGFyc1R5cGVkOiB0cnVlLCAvLyBzaG93IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0eXBlZCBhbmQgbm90IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyByZW1haW5pbmdcbiAgICAgICAgICB2YWxpZGF0ZTogZmFsc2UsIC8vIGlmIHRoZSBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgbWF4bGVuZ3RoIGF0dHJpYnV0ZSwgYXR0ZW1wdCB0byB0eXBlIG1vcmUgdGhhbiB0aGUgaW5kaWNhdGVkIGNoYXJzLCB3aWxsIGJlIHByZXZlbnRlZC5cbiAgICAgICAgICB1dGY4OiBmYWxzZSwgLy8gY291bnRzIHVzaW5nIGJ5dGVzaXplIHJhdGhlciB0aGFuIGxlbmd0aC4gZWc6ICfCoycgaXMgY291bnRlZCBhcyAyIGNoYXJhY3RlcnMuXG4gICAgICAgICAgYXBwZW5kVG9QYXJlbnQ6IGZhbHNlLCAvLyBhcHBlbmQgdGhlIGluZGljYXRvciB0byB0aGUgaW5wdXQgZmllbGQncyBwYXJlbnQgaW5zdGVhZCBvZiBib2R5XG4gICAgICAgICAgdHdvQ2hhckxpbmVicmVhazogdHJ1ZSwgLy8gY291bnQgbGluZWJyZWFrIGFzIDIgY2hhcmFjdGVycyB0byBtYXRjaCBJRS9DaHJvbWUgdGV4dGFyZWEgdmFsaWRhdGlvbi4gQXMgd2VsbCBhcyBEQiBzdG9yYWdlLlxuICAgICAgICAgIGN1c3RvbU1heEF0dHJpYnV0ZTogbnVsbCwgLy8gbnVsbCA9IHVzZSBtYXhsZW5ndGggYXR0cmlidXRlIGFuZCBicm93c2VyIGZ1bmN0aW9uYWxpdHksIHN0cmluZyA9IHVzZSBzcGVjaWZpZWQgYXR0cmlidXRlIGluc3RlYWQuXG4gICAgICAgICAgY3VzdG9tTWF4Q2xhc3M6ICdvdmVybWF4JywgLy8gQ2xhc3MgdG8gYWRkIHRvIHRoZSBpbnB1dCBmaWVsZCB3aGVuIHRoZSBtYXhsZW5ndGggaXMgZXhjZWVkZWQuXG4gICAgICAgICAgYWxsb3dPdmVyTWF4OiBmYWxzZSwgLy8gRm9ybSBzdWJtaXQgdmFsaWRhdGlvbiBpcyBoYW5kbGVkIG9uIHlvdXIgb3duLiAgd2hlbiBtYXhsZW5ndGggaGFzIGJlZW4gZXhjZWVkZWQgJ292ZXJtYXgnIGNsYXNzIGFkZGVkIHRvIGVsZW1lbnRcbiAgICAgICAgICB6SW5kZXg6IDEwOTlcbiAgICAgICAgfTtcblxuICAgICAgaWYgKCQuaXNGdW5jdGlvbihvcHRpb25zKSAmJiAhY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgICB9XG4gICAgICBvcHRpb25zID0gJC5leHRlbmQoZGVmYXVsdHMsIG9wdGlvbnMpO1xuXG5cbiAgICAgIC8qKlxuICAgICAgICogUmV0dXJuIHRoZSBieXRlIGNvdW50IG9mIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIGluIFVURjggZW5jb2RpbmcuXG4gICAgICAgKiBOb3RlOiBUaGlzIHdvbid0IGNvdmVyIFVURi04IGNoYXJhY3RlcnMgdGhhdCBhcmUgNCBieXRlcyBsb25nLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBpbnB1dFxuICAgICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiB1dGY4Q2hhckJ5dGVDb3VudChjaGFyYWN0ZXIpIHtcbiAgICAgICAgdmFyIGMgPSBjaGFyYWN0ZXIuY2hhckNvZGVBdCgpO1xuICAgICAgICAvLyBOb3QgYyB0aGVuIDAsIGVsc2UgYyA8IDEyOCB0aGVuIDEsIGVsc2UgYyA8IDIwNDggdGhlbiAyLCBlbHNlIDNcbiAgICAgICAgcmV0dXJuICFjID8gMCA6IGMgPCAxMjggPyAxIDogYyA8IDIwNDggPyAyIDogMztcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgc3BlY2lmaWVkIGlucHV0IGluIFVURjggZW5jb2RpbmcuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGlucHV0XG4gICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIHV0ZjhMZW5ndGgoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmcuc3BsaXQoXCJcIilcbiAgICAgICAgICAubWFwKHV0ZjhDaGFyQnl0ZUNvdW50KVxuICAgICAgICAgIC8vIFByZXZlbnQgcmVkdWNlIGZyb20gdGhyb3dpbmcgYW4gZXJyb3IgaWYgdGhlIHN0cmluZyBpcyBlbXB0eS5cbiAgICAgICAgICAuY29uY2F0KDApXG4gICAgICAgICAgLnJlZHVjZShmdW5jdGlvbiAoc3VtLCB2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiBzdW0gKyB2YWw7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIHNwZWNpZmllZCBpbnB1dC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gaW5wdXRcbiAgICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gaW5wdXRMZW5ndGgoaW5wdXQpIHtcbiAgICAgICAgdmFyIHRleHQgPSBpbnB1dC52YWwoKTtcblxuICAgICAgICBpZiAob3B0aW9ucy50d29DaGFyTGluZWJyZWFrKSB7XG4gICAgICAgICAgLy8gQ291bnQgYWxsIGxpbmUgYnJlYWtzIGFzIDIgY2hhcmFjdGVyc1xuICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xccig/IVxcbil8XFxuKD8hXFxyKS9nLCAnXFxyXFxuJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIGFsbCBkb3VibGUtY2hhcmFjdGVyIChcXHJcXG4pIGxpbmVicmVha3MsIHNvIHRoZXkncmUgY291bnRlZCBvbmx5IG9uY2UuXG4gICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgvKD86XFxyXFxufFxccnxcXG4pL2csICdcXG4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50TGVuZ3RoID0gMDtcblxuICAgICAgICBpZiAob3B0aW9ucy51dGY4KSB7XG4gICAgICAgICAgY3VycmVudExlbmd0aCA9IHV0ZjhMZW5ndGgodGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudExlbmd0aCA9IHRleHQubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIFwiQzpcXGZha2VwYXRoXFxcIiBmcm9tIGNvdW50ZXIgd2hlbiB1c2luZyBmaWxlIGlucHV0XG4gICAgICAgIC8vIEZpeCBodHRwczovL2dpdGh1Yi5jb20vbWltbzg0L2Jvb3RzdHJhcC1tYXhsZW5ndGgvaXNzdWVzLzE0NlxuICAgICAgICBpZiAoaW5wdXQucHJvcChcInR5cGVcIikgPT09IFwiZmlsZVwiICYmIGlucHV0LnZhbCgpICE9PSBcIlwiKSB7XG4gICAgICAgICAgY3VycmVudExlbmd0aCAtPSAxMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjdXJyZW50TGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFRydW5jYXRlIHRoZSB0ZXh0IG9mIHRoZSBzcGVjaWZpZWQgaW5wdXQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGlucHV0XG4gICAgICAgKiBAcGFyYW0gbGltaXRcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gdHJ1bmNhdGVDaGFycyhpbnB1dCwgbWF4bGVuZ3RoKSB7XG4gICAgICAgIHZhciB0ZXh0ID0gaW5wdXQudmFsKCk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMudHdvQ2hhckxpbmVicmVhaykge1xuICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xccig/IVxcbil8XFxuKD8hXFxyKS9nLCAnXFxyXFxuJyk7XG5cbiAgICAgICAgICBpZiAodGV4dFt0ZXh0Lmxlbmd0aCAtIDFdID09PSAnXFxuJykge1xuICAgICAgICAgICAgbWF4bGVuZ3RoIC09IHRleHQubGVuZ3RoICUgMjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy51dGY4KSB7XG4gICAgICAgICAgdmFyIGluZGV4ZWRTaXplID0gdGV4dC5zcGxpdChcIlwiKS5tYXAodXRmOENoYXJCeXRlQ291bnQpO1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICB2YXIgcmVtb3ZlZEJ5dGVzID0gMCxcbiAgICAgICAgICAgIGJ5dGVzUGFzdE1heCA9IHV0ZjhMZW5ndGgodGV4dCkgLSBtYXhsZW5ndGg7IHJlbW92ZWRCeXRlcyA8IGJ5dGVzUGFzdE1heDsgcmVtb3ZlZEJ5dGVzICs9IGluZGV4ZWRTaXplLnBvcCgpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBtYXhsZW5ndGggLT0gKG1heGxlbmd0aCAtIGluZGV4ZWRTaXplLmxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dC52YWwodGV4dC5zdWJzdHIoMCwgbWF4bGVuZ3RoKSk7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogUmV0dXJuIHRydWUgaWYgdGhlIGluZGljYXRvciBzaG91bGQgYmUgc2hvd2luZyB1cC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gaW5wdXRcbiAgICAgICAqIEBwYXJhbSB0aHJlc2hvbGRcbiAgICAgICAqIEBwYXJhbSBtYXhsZW5ndGhcbiAgICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gY2hhcnNMZWZ0VGhyZXNob2xkKGlucHV0LCB0aHJlc2hvbGQsIG1heGxlbmd0aCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFvcHRpb25zLmFsd2F5c1Nob3cgJiYgKG1heGxlbmd0aCAtIGlucHV0TGVuZ3RoKGlucHV0KSA+IHRocmVzaG9sZCkpIHtcbiAgICAgICAgICBvdXRwdXQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFJldHVybnMgaG93IG1hbnkgY2hhcnMgYXJlIGxlZnQgdG8gY29tcGxldGUgdGhlIGZpbGwgdXAgb2YgdGhlIGZvcm0uXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGlucHV0XG4gICAgICAgKiBAcGFyYW0gbWF4bGVuZ3RoXG4gICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIHJlbWFpbmluZ0NoYXJzKGlucHV0LCBtYXhsZW5ndGgpIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IG1heGxlbmd0aCAtIGlucHV0TGVuZ3RoKGlucHV0KTtcbiAgICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBXaGVuIGNhbGxlZCBkaXNwbGF5cyB0aGUgaW5kaWNhdG9yLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBpbmRpY2F0b3JcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gc2hvd1JlbWFpbmluZyhjdXJyZW50SW5wdXQsIGluZGljYXRvcikge1xuICAgICAgICBpbmRpY2F0b3IuY3NzKHtcbiAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snXG4gICAgICAgIH0pO1xuICAgICAgICBjdXJyZW50SW5wdXQudHJpZ2dlcignbWF4bGVuZ3RoLnNob3duJyk7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogV2hlbiBjYWxsZWQgc2hvd3MgdGhlIGluZGljYXRvci5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gaW5kaWNhdG9yXG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIGhpZGVSZW1haW5pbmcoY3VycmVudElucHV0LCBpbmRpY2F0b3IpIHtcblxuICAgICAgICBpZiAob3B0aW9ucy5hbHdheXNTaG93KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kaWNhdG9yLmNzcyh7XG4gICAgICAgICAgZGlzcGxheTogJ25vbmUnXG4gICAgICAgIH0pO1xuICAgICAgICBjdXJyZW50SW5wdXQudHJpZ2dlcignbWF4bGVuZ3RoLmhpZGRlbicpO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgdmFsdWUgaW4gdGhlIGluZGljYXRvclxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBtYXhMZW5ndGhUaGlzSW5wdXRcbiAgICAgICAqIEBwYXJhbSB0eXBlZENoYXJzXG4gICAgICAgKiBAcmV0dXJuIFN0cmluZ1xuICAgICAgICovXG4gICAgICBmdW5jdGlvbiB1cGRhdGVNYXhMZW5ndGhIVE1MKGN1cnJlbnRJbnB1dFRleHQsIG1heExlbmd0aFRoaXNJbnB1dCwgdHlwZWRDaGFycykge1xuICAgICAgICB2YXIgb3V0cHV0ID0gJyc7XG4gICAgICAgIGlmIChvcHRpb25zLm1lc3NhZ2UpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgb3V0cHV0ID0gb3B0aW9ucy5tZXNzYWdlKGN1cnJlbnRJbnB1dFRleHQsIG1heExlbmd0aFRoaXNJbnB1dCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dHB1dCA9IG9wdGlvbnMubWVzc2FnZS5yZXBsYWNlKCclY2hhcnNUeXBlZCUnLCB0eXBlZENoYXJzKVxuICAgICAgICAgICAgICAucmVwbGFjZSgnJWNoYXJzUmVtYWluaW5nJScsIG1heExlbmd0aFRoaXNJbnB1dCAtIHR5cGVkQ2hhcnMpXG4gICAgICAgICAgICAgIC5yZXBsYWNlKCclY2hhcnNUb3RhbCUnLCBtYXhMZW5ndGhUaGlzSW5wdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5wcmVUZXh0KSB7XG4gICAgICAgICAgICBvdXRwdXQgKz0gb3B0aW9ucy5wcmVUZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2hvd0NoYXJzVHlwZWQpIHtcbiAgICAgICAgICAgIG91dHB1dCArPSBtYXhMZW5ndGhUaGlzSW5wdXQgLSB0eXBlZENoYXJzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXRwdXQgKz0gdHlwZWRDaGFycztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9wdGlvbnMuc2hvd01heExlbmd0aCkge1xuICAgICAgICAgICAgb3V0cHV0ICs9IG9wdGlvbnMuc2VwYXJhdG9yICsgbWF4TGVuZ3RoVGhpc0lucHV0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3B0aW9ucy5wb3N0VGV4dCkge1xuICAgICAgICAgICAgb3V0cHV0ICs9IG9wdGlvbnMucG9zdFRleHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSB2YWx1ZSBvZiB0aGUgY291bnRlciBpbiB0aGUgaW5kaWNhdG9yLlxuICAgICAgICogV2FudHMgYXMgcGFyYW1ldGVyczogdGhlIG51bWJlciBvZiByZW1haW5pbmcgY2hhcnMsIHRoZSBlbGVtZW50IGN1cnJlbnRseSBtYW5hZ2VkLFxuICAgICAgICogdGhlIG1heExlbmd0aCBmb3IgdGhlIGN1cnJlbnQgaW5wdXQgYW5kIHRoZSBpbmRpY2F0b3IgZ2VuZXJhdGVkIGZvciBpdC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gcmVtYWluaW5nXG4gICAgICAgKiBAcGFyYW0gY3VycmVudElucHV0XG4gICAgICAgKiBAcGFyYW0gbWF4TGVuZ3RoQ3VycmVudElucHV0XG4gICAgICAgKiBAcGFyYW0gbWF4TGVuZ3RoSW5kaWNhdG9yXG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIG1hbmFnZVJlbWFpbmluZ1Zpc2liaWxpdHkocmVtYWluaW5nLCBjdXJyZW50SW5wdXQsIG1heExlbmd0aEN1cnJlbnRJbnB1dCwgbWF4TGVuZ3RoSW5kaWNhdG9yKSB7XG4gICAgICAgIGlmIChtYXhMZW5ndGhJbmRpY2F0b3IpIHtcbiAgICAgICAgICBtYXhMZW5ndGhJbmRpY2F0b3IuaHRtbCh1cGRhdGVNYXhMZW5ndGhIVE1MKGN1cnJlbnRJbnB1dC52YWwoKSwgbWF4TGVuZ3RoQ3VycmVudElucHV0LCAobWF4TGVuZ3RoQ3VycmVudElucHV0IC0gcmVtYWluaW5nKSkpO1xuXG4gICAgICAgICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgICAgICAgIGlmIChjaGFyc0xlZnRUaHJlc2hvbGQoY3VycmVudElucHV0LCBvcHRpb25zLnRocmVzaG9sZCwgbWF4TGVuZ3RoQ3VycmVudElucHV0KSkge1xuICAgICAgICAgICAgICBzaG93UmVtYWluaW5nKGN1cnJlbnRJbnB1dCwgbWF4TGVuZ3RoSW5kaWNhdG9yLnJlbW92ZUNsYXNzKG9wdGlvbnMubGltaXRSZWFjaGVkQ2xhc3MgKyAnICcgKyBvcHRpb25zLmxpbWl0RXhjZWVkZWRDbGFzcykuYWRkQ2xhc3Mob3B0aW9ucy53YXJuaW5nQ2xhc3MpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGhpZGVSZW1haW5pbmcoY3VycmVudElucHV0LCBtYXhMZW5ndGhJbmRpY2F0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMubGltaXRFeGNlZWRlZENsYXNzKSB7XG4gICAgICAgICAgICAgIHNob3dSZW1haW5pbmcoY3VycmVudElucHV0LCBtYXhMZW5ndGhJbmRpY2F0b3IucmVtb3ZlQ2xhc3Mob3B0aW9ucy53YXJuaW5nQ2xhc3MpLmFkZENsYXNzKG9wdGlvbnMubGltaXRSZWFjaGVkQ2xhc3MpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChyZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgICAgICAgICBzaG93UmVtYWluaW5nKGN1cnJlbnRJbnB1dCwgbWF4TGVuZ3RoSW5kaWNhdG9yLnJlbW92ZUNsYXNzKG9wdGlvbnMud2FybmluZ0NsYXNzICsgJyAnICsgb3B0aW9ucy5saW1pdEV4Y2VlZGVkQ2xhc3MpLmFkZENsYXNzKG9wdGlvbnMubGltaXRSZWFjaGVkQ2xhc3MpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaG93UmVtYWluaW5nKGN1cnJlbnRJbnB1dCwgbWF4TGVuZ3RoSW5kaWNhdG9yLnJlbW92ZUNsYXNzKG9wdGlvbnMud2FybmluZ0NsYXNzICsgJyAnICsgb3B0aW9ucy5saW1pdFJlYWNoZWRDbGFzcykuYWRkQ2xhc3Mob3B0aW9ucy5saW1pdEV4Y2VlZGVkQ2xhc3MpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmN1c3RvbU1heEF0dHJpYnV0ZSkge1xuICAgICAgICAgIC8vIGNsYXNzIHRvIHVzZSBmb3IgZm9ybSB2YWxpZGF0aW9uIG9uIGN1c3RvbSBtYXhsZW5ndGggYXR0cmlidXRlXG4gICAgICAgICAgaWYgKHJlbWFpbmluZyA8IDApIHtcbiAgICAgICAgICAgIGN1cnJlbnRJbnB1dC5hZGRDbGFzcyhvcHRpb25zLmN1c3RvbU1heENsYXNzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VycmVudElucHV0LnJlbW92ZUNsYXNzKG9wdGlvbnMuY3VzdG9tTWF4Q2xhc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlXG4gICAgICAgKiBpbmZvcm1hdGlvbnMgYWJvdXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IGlucHV0XG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGN1cnJlbnRJbnB1dFxuICAgICAgICogQHJldHVybiBvYmplY3Qge2JvdHRvbSBoZWlnaHQgbGVmdCByaWdodCB0b3Agd2lkdGh9XG4gICAgICAgKlxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBnZXRQb3NpdGlvbihjdXJyZW50SW5wdXQpIHtcbiAgICAgICAgdmFyIGVsID0gY3VycmVudElucHV0WzBdO1xuICAgICAgICByZXR1cm4gJC5leHRlbmQoe30sICh0eXBlb2YgZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID09PSAnZnVuY3Rpb24nKSA/IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIDoge1xuICAgICAgICAgIHdpZHRoOiBlbC5vZmZzZXRXaWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IGVsLm9mZnNldEhlaWdodFxuICAgICAgICB9LCBjdXJyZW50SW5wdXQub2Zmc2V0KCkpO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFRoaXMgZnVuY3Rpb24gcGxhY2VzIHRoZSBtYXhMZW5ndGhJbmRpY2F0b3IgYmFzZWQgb24gcGxhY2VtZW50IGNvbmZpZyBvYmplY3QuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBsYWNlbWVudFxuICAgICAgICogQHBhcmFtIHskfSBtYXhMZW5ndGhJbmRpY2F0b3JcbiAgICAgICAqIEByZXR1cm4gbnVsbFxuICAgICAgICpcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gcGxhY2VXaXRoQ1NTKHBsYWNlbWVudCwgbWF4TGVuZ3RoSW5kaWNhdG9yKSB7XG4gICAgICAgIGlmICghcGxhY2VtZW50IHx8ICFtYXhMZW5ndGhJbmRpY2F0b3IpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgUE9TSVRJT05fS0VZUyA9IFtcbiAgICAgICAgICAndG9wJyxcbiAgICAgICAgICAnYm90dG9tJyxcbiAgICAgICAgICAnbGVmdCcsXG4gICAgICAgICAgJ3JpZ2h0JyxcbiAgICAgICAgICAncG9zaXRpb24nXG4gICAgICAgIF07XG5cbiAgICAgICAgdmFyIGNzc1BvcyA9IHt9O1xuXG4gICAgICAgIC8vIGZpbHRlciBjc3MgcHJvcGVydGllcyB0byBwb3NpdGlvblxuICAgICAgICAkLmVhY2goUE9TSVRJT05fS0VZUywgZnVuY3Rpb24gKGksIGtleSkge1xuICAgICAgICAgIHZhciB2YWwgPSBvcHRpb25zLnBsYWNlbWVudFtrZXldO1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3NzUG9zW2tleV0gPSB2YWw7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBtYXhMZW5ndGhJbmRpY2F0b3IuY3NzKGNzc1Bvcyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG5cbiAgICAgIC8qKlxuICAgICAgICogVGhpcyBmdW5jdGlvbiBwbGFjZXMgdGhlIG1heExlbmd0aEluZGljYXRvciBhdCB0aGVcbiAgICAgICAqIHRvcCAvIGJvdHRvbSAvIGxlZnQgLyByaWdodCBvZiB0aGUgY3VycmVudElucHV0XG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGN1cnJlbnRJbnB1dFxuICAgICAgICogQHBhcmFtIG1heExlbmd0aEluZGljYXRvclxuICAgICAgICogQHJldHVybiBudWxsXG4gICAgICAgKlxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBwbGFjZShjdXJyZW50SW5wdXQsIG1heExlbmd0aEluZGljYXRvcikge1xuICAgICAgICB2YXIgcG9zID0gZ2V0UG9zaXRpb24oY3VycmVudElucHV0KTtcblxuICAgICAgICAvLyBTdXBwb3J0cyBjdXN0b20gcGxhY2VtZW50IGhhbmRsZXJcbiAgICAgICAgaWYgKCQudHlwZShvcHRpb25zLnBsYWNlbWVudCkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvcHRpb25zLnBsYWNlbWVudChjdXJyZW50SW5wdXQsIG1heExlbmd0aEluZGljYXRvciwgcG9zKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdXBwb3J0cyBjdXN0b20gcGxhY2VtZW50IHZpYSBjc3MgcG9zaXRpb25hbCBwcm9wZXJ0aWVzXG4gICAgICAgIGlmICgkLmlzUGxhaW5PYmplY3Qob3B0aW9ucy5wbGFjZW1lbnQpKSB7XG4gICAgICAgICAgcGxhY2VXaXRoQ1NTKG9wdGlvbnMucGxhY2VtZW50LCBtYXhMZW5ndGhJbmRpY2F0b3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpbnB1dE91dGVyID0gY3VycmVudElucHV0Lm91dGVyV2lkdGgoKSxcbiAgICAgICAgICBvdXRlcldpZHRoID0gbWF4TGVuZ3RoSW5kaWNhdG9yLm91dGVyV2lkdGgoKSxcbiAgICAgICAgICBhY3R1YWxXaWR0aCA9IG1heExlbmd0aEluZGljYXRvci53aWR0aCgpLFxuICAgICAgICAgIGFjdHVhbEhlaWdodCA9IG1heExlbmd0aEluZGljYXRvci5oZWlnaHQoKTtcblxuICAgICAgICAvLyBnZXQgdGhlIHJpZ2h0IHBvc2l0aW9uIGlmIHRoZSBpbmRpY2F0b3IgaXMgYXBwZW5kZWQgdG8gdGhlIGlucHV0J3MgcGFyZW50XG4gICAgICAgIGlmIChvcHRpb25zLmFwcGVuZFRvUGFyZW50KSB7XG4gICAgICAgICAgcG9zLnRvcCAtPSBjdXJyZW50SW5wdXQucGFyZW50KCkub2Zmc2V0KCkudG9wO1xuICAgICAgICAgIHBvcy5sZWZ0IC09IGN1cnJlbnRJbnB1dC5wYXJlbnQoKS5vZmZzZXQoKS5sZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChvcHRpb25zLnBsYWNlbWVudCkge1xuICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgICBtYXhMZW5ndGhJbmRpY2F0b3IuY3NzKHtcbiAgICAgICAgICAgICAgdG9wOiBwb3MudG9wICsgcG9zLmhlaWdodCxcbiAgICAgICAgICAgICAgbGVmdDogcG9zLmxlZnQgKyBwb3Mud2lkdGggLyAyIC0gYWN0dWFsV2lkdGggLyAyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgICBtYXhMZW5ndGhJbmRpY2F0b3IuY3NzKHtcbiAgICAgICAgICAgICAgdG9wOiBwb3MudG9wIC0gYWN0dWFsSGVpZ2h0LFxuICAgICAgICAgICAgICBsZWZ0OiBwb3MubGVmdCArIHBvcy53aWR0aCAvIDIgLSBhY3R1YWxXaWR0aCAvIDJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgICBtYXhMZW5ndGhJbmRpY2F0b3IuY3NzKHtcbiAgICAgICAgICAgICAgdG9wOiBwb3MudG9wICsgcG9zLmhlaWdodCAvIDIgLSBhY3R1YWxIZWlnaHQgLyAyLFxuICAgICAgICAgICAgICBsZWZ0OiBwb3MubGVmdCAtIGFjdHVhbFdpZHRoXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgIG1heExlbmd0aEluZGljYXRvci5jc3Moe1xuICAgICAgICAgICAgICB0b3A6IHBvcy50b3AgKyBwb3MuaGVpZ2h0IC8gMiAtIGFjdHVhbEhlaWdodCAvIDIsXG4gICAgICAgICAgICAgIGxlZnQ6IHBvcy5sZWZ0ICsgcG9zLndpZHRoXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgICAgICBtYXhMZW5ndGhJbmRpY2F0b3IuY3NzKHtcbiAgICAgICAgICAgICAgdG9wOiBwb3MudG9wICsgcG9zLmhlaWdodCxcbiAgICAgICAgICAgICAgbGVmdDogcG9zLmxlZnQgKyBwb3Mud2lkdGhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICAgICAgICAgIG1heExlbmd0aEluZGljYXRvci5jc3Moe1xuICAgICAgICAgICAgICB0b3A6IHBvcy50b3AgLSBhY3R1YWxIZWlnaHQsXG4gICAgICAgICAgICAgIGxlZnQ6IHBvcy5sZWZ0ICsgaW5wdXRPdXRlclxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICd0b3AtbGVmdCc6XG4gICAgICAgICAgICBtYXhMZW5ndGhJbmRpY2F0b3IuY3NzKHtcbiAgICAgICAgICAgICAgdG9wOiBwb3MudG9wIC0gYWN0dWFsSGVpZ2h0LFxuICAgICAgICAgICAgICBsZWZ0OiBwb3MubGVmdCAtIG91dGVyV2lkdGhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICAgICAgbWF4TGVuZ3RoSW5kaWNhdG9yLmNzcyh7XG4gICAgICAgICAgICAgIHRvcDogcG9zLnRvcCArIGN1cnJlbnRJbnB1dC5vdXRlckhlaWdodCgpLFxuICAgICAgICAgICAgICBsZWZ0OiBwb3MubGVmdCAtIG91dGVyV2lkdGhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnY2VudGVyZWQtcmlnaHQnOlxuICAgICAgICAgICAgbWF4TGVuZ3RoSW5kaWNhdG9yLmNzcyh7XG4gICAgICAgICAgICAgIHRvcDogcG9zLnRvcCArIChhY3R1YWxIZWlnaHQgLyAyKSxcbiAgICAgICAgICAgICAgbGVmdDogcG9zLmxlZnQgKyBpbnB1dE91dGVyIC0gb3V0ZXJXaWR0aCAtIDNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAvLyBTb21lIG1vcmUgb3B0aW9ucyBmb3IgcGxhY2VtZW50c1xuICAgICAgICAgIGNhc2UgJ2JvdHRvbS1yaWdodC1pbnNpZGUnOlxuICAgICAgICAgICAgbWF4TGVuZ3RoSW5kaWNhdG9yLmNzcyh7XG4gICAgICAgICAgICAgIHRvcDogcG9zLnRvcCArIHBvcy5oZWlnaHQsXG4gICAgICAgICAgICAgIGxlZnQ6IHBvcy5sZWZ0ICsgcG9zLndpZHRoIC0gb3V0ZXJXaWR0aFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICd0b3AtcmlnaHQtaW5zaWRlJzpcbiAgICAgICAgICAgIG1heExlbmd0aEluZGljYXRvci5jc3Moe1xuICAgICAgICAgICAgICB0b3A6IHBvcy50b3AgLSBhY3R1YWxIZWlnaHQsXG4gICAgICAgICAgICAgIGxlZnQ6IHBvcy5sZWZ0ICsgaW5wdXRPdXRlciAtIG91dGVyV2lkdGhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAndG9wLWxlZnQtaW5zaWRlJzpcbiAgICAgICAgICAgIG1heExlbmd0aEluZGljYXRvci5jc3Moe1xuICAgICAgICAgICAgICB0b3A6IHBvcy50b3AgLSBhY3R1YWxIZWlnaHQsXG4gICAgICAgICAgICAgIGxlZnQ6IHBvcy5sZWZ0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2JvdHRvbS1sZWZ0LWluc2lkZSc6XG4gICAgICAgICAgICBtYXhMZW5ndGhJbmRpY2F0b3IuY3NzKHtcbiAgICAgICAgICAgICAgdG9wOiBwb3MudG9wICsgY3VycmVudElucHV0Lm91dGVySGVpZ2h0KCksXG4gICAgICAgICAgICAgIGxlZnQ6IHBvcy5sZWZ0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIGluZGljYXRvciBwb3NpdGlvbiBuZWVkcyB0b1xuICAgICAgICogYmUgcmVjYWxjdWxhdGVkIHdoZW4gdGhlIGN1cnJlbnRJbnB1dCBjaGFuZ2VzXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgICAqXG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIGlzUGxhY2VtZW50TXV0YWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMucGxhY2VtZW50ID09PSAnYm90dG9tLXJpZ2h0LWluc2lkZScgfHwgb3B0aW9ucy5wbGFjZW1lbnQgPT09ICd0b3AtcmlnaHQtaW5zaWRlJyB8fCB0eXBlb2Ygb3B0aW9ucy5wbGFjZW1lbnQgPT09ICdmdW5jdGlvbicgfHwgKG9wdGlvbnMubWVzc2FnZSAmJiB0eXBlb2Ygb3B0aW9ucy5tZXNzYWdlID09PSAnZnVuY3Rpb24nKTtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgY3VycmVudElucHV0XG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGN1cnJlbnRJbnB1dFxuICAgICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAgICpcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gZ2V0TWF4TGVuZ3RoKGN1cnJlbnRJbnB1dCkge1xuICAgICAgICB2YXIgbWF4ID0gY3VycmVudElucHV0LmF0dHIoJ21heGxlbmd0aCcpIHx8IG9wdGlvbnMuY3VzdG9tTWF4QXR0cmlidXRlO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmN1c3RvbU1heEF0dHJpYnV0ZSAmJiAhb3B0aW9ucy5hbGxvd092ZXJNYXgpIHtcbiAgICAgICAgICB2YXIgY3VzdG9tID0gY3VycmVudElucHV0LmF0dHIob3B0aW9ucy5jdXN0b21NYXhBdHRyaWJ1dGUpO1xuICAgICAgICAgIGlmICghbWF4IHx8IGN1c3RvbSA8IG1heCkge1xuICAgICAgICAgICAgbWF4ID0gY3VzdG9tO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbWF4KSB7XG4gICAgICAgICAgbWF4ID0gY3VycmVudElucHV0LmF0dHIoJ3NpemUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICB2YXIgY3VycmVudElucHV0ID0gJCh0aGlzKSxcbiAgICAgICAgICBtYXhMZW5ndGhDdXJyZW50SW5wdXQsXG4gICAgICAgICAgbWF4TGVuZ3RoSW5kaWNhdG9yO1xuXG4gICAgICAgICQod2luZG93KS5yZXNpemUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChtYXhMZW5ndGhJbmRpY2F0b3IpIHtcbiAgICAgICAgICAgIHBsYWNlKGN1cnJlbnRJbnB1dCwgbWF4TGVuZ3RoSW5kaWNhdG9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGZpcnN0SW5pdCgpIHtcbiAgICAgICAgICB2YXIgbWF4bGVuZ3RoQ29udGVudCA9IHVwZGF0ZU1heExlbmd0aEhUTUwoY3VycmVudElucHV0LnZhbCgpLCBtYXhMZW5ndGhDdXJyZW50SW5wdXQsICcwJyk7XG4gICAgICAgICAgbWF4TGVuZ3RoQ3VycmVudElucHV0ID0gZ2V0TWF4TGVuZ3RoKGN1cnJlbnRJbnB1dCk7XG5cbiAgICAgICAgICBpZiAoIW1heExlbmd0aEluZGljYXRvcikge1xuICAgICAgICAgICAgbWF4TGVuZ3RoSW5kaWNhdG9yID0gJCgnPHNwYW4gY2xhc3M9XCJib290c3RyYXAtbWF4bGVuZ3RoXCI+PC9zcGFuPicpLmNzcyh7XG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdub25lJyxcbiAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgICAgICAgICAgICB6SW5kZXg6IG9wdGlvbnMuekluZGV4XG4gICAgICAgICAgICB9KS5odG1sKG1heGxlbmd0aENvbnRlbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZGV0ZWN0IHJlc2l6ZXMgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHRleHRhcmVhOlxuICAgICAgICAgIGlmIChjdXJyZW50SW5wdXQuaXMoJ3RleHRhcmVhJykpIHtcbiAgICAgICAgICAgIGN1cnJlbnRJbnB1dC5kYXRhKCdtYXhsZW5naHRzaXpleCcsIGN1cnJlbnRJbnB1dC5vdXRlcldpZHRoKCkpO1xuICAgICAgICAgICAgY3VycmVudElucHV0LmRhdGEoJ21heGxlbmdodHNpemV5JywgY3VycmVudElucHV0Lm91dGVySGVpZ2h0KCkpO1xuXG4gICAgICAgICAgICBjdXJyZW50SW5wdXQubW91c2V1cChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGlmIChjdXJyZW50SW5wdXQub3V0ZXJXaWR0aCgpICE9PSBjdXJyZW50SW5wdXQuZGF0YSgnbWF4bGVuZ2h0c2l6ZXgnKSB8fCBjdXJyZW50SW5wdXQub3V0ZXJIZWlnaHQoKSAhPT0gY3VycmVudElucHV0LmRhdGEoJ21heGxlbmdodHNpemV5JykpIHtcbiAgICAgICAgICAgICAgICBwbGFjZShjdXJyZW50SW5wdXQsIG1heExlbmd0aEluZGljYXRvcik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjdXJyZW50SW5wdXQuZGF0YSgnbWF4bGVuZ2h0c2l6ZXgnLCBjdXJyZW50SW5wdXQub3V0ZXJXaWR0aCgpKTtcbiAgICAgICAgICAgICAgY3VycmVudElucHV0LmRhdGEoJ21heGxlbmdodHNpemV5JywgY3VycmVudElucHV0Lm91dGVySGVpZ2h0KCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMuYXBwZW5kVG9QYXJlbnQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRJbnB1dC5wYXJlbnQoKS5hcHBlbmQobWF4TGVuZ3RoSW5kaWNhdG9yKTtcbiAgICAgICAgICAgIGN1cnJlbnRJbnB1dC5wYXJlbnQoKS5jc3MoJ3Bvc2l0aW9uJywgJ3JlbGF0aXZlJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvY3VtZW50Qm9keS5hcHBlbmQobWF4TGVuZ3RoSW5kaWNhdG9yKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgcmVtYWluaW5nID0gcmVtYWluaW5nQ2hhcnMoY3VycmVudElucHV0LCBnZXRNYXhMZW5ndGgoY3VycmVudElucHV0KSk7XG4gICAgICAgICAgbWFuYWdlUmVtYWluaW5nVmlzaWJpbGl0eShyZW1haW5pbmcsIGN1cnJlbnRJbnB1dCwgbWF4TGVuZ3RoQ3VycmVudElucHV0LCBtYXhMZW5ndGhJbmRpY2F0b3IpO1xuICAgICAgICAgIHBsYWNlKGN1cnJlbnRJbnB1dCwgbWF4TGVuZ3RoSW5kaWNhdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnNob3dPblJlYWR5KSB7XG4gICAgICAgICAgY3VycmVudElucHV0LnJlYWR5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGZpcnN0SW5pdCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRJbnB1dC5mb2N1cyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmaXJzdEluaXQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRJbnB1dC5vbignbWF4bGVuZ3RoLnJlcG9zaXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcGxhY2UoY3VycmVudElucHV0LCBtYXhMZW5ndGhJbmRpY2F0b3IpO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIGN1cnJlbnRJbnB1dC5vbignZGVzdHJveWVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChtYXhMZW5ndGhJbmRpY2F0b3IpIHtcbiAgICAgICAgICAgIG1heExlbmd0aEluZGljYXRvci5yZW1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN1cnJlbnRJbnB1dC5vbignYmx1cicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobWF4TGVuZ3RoSW5kaWNhdG9yICYmICFvcHRpb25zLnNob3dPblJlYWR5KSB7XG4gICAgICAgICAgICBtYXhMZW5ndGhJbmRpY2F0b3IucmVtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjdXJyZW50SW5wdXQub24oJ2lucHV0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBtYXhsZW5ndGggPSBnZXRNYXhMZW5ndGgoY3VycmVudElucHV0KSxcbiAgICAgICAgICAgIHJlbWFpbmluZyA9IHJlbWFpbmluZ0NoYXJzKGN1cnJlbnRJbnB1dCwgbWF4bGVuZ3RoKSxcbiAgICAgICAgICAgIG91dHB1dCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAob3B0aW9ucy52YWxpZGF0ZSAmJiByZW1haW5pbmcgPCAwKSB7XG4gICAgICAgICAgICB0cnVuY2F0ZUNoYXJzKGN1cnJlbnRJbnB1dCwgbWF4bGVuZ3RoKTtcbiAgICAgICAgICAgIG91dHB1dCA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtYW5hZ2VSZW1haW5pbmdWaXNpYmlsaXR5KHJlbWFpbmluZywgY3VycmVudElucHV0LCBtYXhMZW5ndGhDdXJyZW50SW5wdXQsIG1heExlbmd0aEluZGljYXRvcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWYgKGlzUGxhY2VtZW50TXV0YWJsZSgpKSB7XG4gICAgICAgICAgLy8gICBwbGFjZShjdXJyZW50SW5wdXQsIG1heExlbmd0aEluZGljYXRvcik7XG4gICAgICAgICAgLy8gfVxuXG4gICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufShqUXVlcnkpKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bootstrap-maxlength/src/bootstrap-maxlength.js\n"); /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/compat get default export */ /******/ !function() { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function() { return module['default']; } : /******/ function() { return module; }; /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ !function() { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = function(exports, definition) { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ !function() { /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } /******/ }(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ !function() { /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ }(); /******/ /************************************************************************/ /******/ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module can't be inlined because the eval-source-map devtool is used. /******/ var __webpack_exports__ = __webpack_require__("./libs/bootstrap-maxlength/bootstrap-maxlength.js"); /******/ /******/ return __webpack_exports__; /******/ })() ; });