/******/ (function() { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ "./components/auto-tabs.js": /*!*********************************!*\ !*** ./components/auto-tabs.js ***! \*********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ autoTabs: function() { return /* binding */ autoTabs; } /* harmony export */ }); /* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery"); function autoTabs() { if ($(".hero .projects").length) { setInterval(function () { var active_autoTab = $('.js-auto-loop-tabs.is-active'); var first_autoTab = $('.js-auto-loop-tabs.first'); if (active_autoTab.hasClass("last")) first_autoTab.click();else active_autoTab.next().click(); }, 4000); } } /***/ }), /***/ "./components/ba-collapser.js": /*!************************************!*\ !*** ./components/ba-collapser.js ***! \************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ baCollapser: function() { return /* binding */ baCollapser; } /* harmony export */ }); /** * Toggle mobile nav * @param {string} el - selector for adding an active class */ function baCollapser(el, elTarget) { var btn = document.querySelector(el); var btnTxt = document.querySelector(el); if (btn) { var btnTarget = document.querySelector(elTarget); var btnTarget2 = btnTarget.querySelector('.ba-nav'); var currentSlide = btnTarget.querySelectorAll('.ba-slider .swiper-slide'); currentSlide.forEach(function (item, index) { var currentExpander = item.querySelector('.l-testimonials '); var height = item.querySelector('img').offsetHeight; currentExpander.style.maxHeight = "".concat(height, "px"); }); btn.addEventListener('click', function (event) { event.preventDefault(); var currentSlide = btnTarget.querySelector('.ba-slider .swiper-slide'); var height = currentSlide.querySelector('img').offsetHeight; var slider = btnTarget.querySelector('.ba-slider .swiper-wrapper'); if (btnTarget.classList.contains('ba-active')) { btnTarget.classList.remove('ba-active'); btnTarget2.scrollIntoView({ block: "start" }); setTimeout(function () { slider.style.height = "auto"; }, 1200); } else { btnTarget.classList.add('ba-active'); slider.style.height = "".concat(height, "px"); } }); } } /***/ }), /***/ "./components/ba-single.js": /*!*********************************!*\ !*** ./components/ba-single.js ***! \*********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ expandBAImage: function() { return /* binding */ expandBAImage; } /* harmony export */ }); /* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery"); function expandBAImage() { $(".bas-expander .c-qz-btn").each(function () { $(this).click(function () { if ($(this).hasClass("on")) { $(this).parent().prev().css('min-height', ''); $(this).removeClass("on"); } else { var height = $(this).parent().prev().find(".c-image__media").outerHeight(); $(this).parent().prev().css('min-height', height); $(this).addClass("on"); } }); }); } /***/ }), /***/ "./components/back-to-top.js": /*!***********************************!*\ !*** ./components/back-to-top.js ***! \***********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ backToTop: function() { return /* binding */ backToTop; } /* harmony export */ }); function backToTop(el) { var btn = document.getElementById(el); if (btn) { btn.addEventListener('click', function () { window.scroll({ top: 0, left: 0, behavior: 'smooth' }); }); } } /***/ }), /***/ "./components/box-cta-widget-cookie.js": /*!*********************************************!*\ !*** ./components/box-cta-widget-cookie.js ***! \*********************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _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, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var hide_box_cta_widget = /*#__PURE__*/function () { function hide_box_cta_widget() { _classCallCheck(this, hide_box_cta_widget); this.cookie_name = 'hide_box_cta_widget'; this.cookie_duration = 30; // Duration in days this.widget_selector = '.js-close-box-cta-widget'; this.box_selector = '.box-cta.-site-wide'; this.init(); } return _createClass(hide_box_cta_widget, [{ key: "init", value: function init() { var _document$querySelect, _this = this; // Check cookie and hide box if set if (this.get_cookie(this.cookie_name)) { this.hide_box(); } else { this.show_box(); } // Bind event listener to hide box on click (_document$querySelect = document.querySelector(this.widget_selector)) === null || _document$querySelect === void 0 || _document$querySelect.addEventListener('click', function (e) { e.preventDefault(); _this.set_cookie(_this.cookie_name, 'true', _this.cookie_duration); _this.hide_box(); }); } }, { key: "hide_box", value: function hide_box() { var box = document.querySelector(this.box_selector); if (box) { box.classList.add('hide-box-cta-widget'); } } }, { key: "show_box", value: function show_box() { var box = document.querySelector(this.box_selector); if (box) { box.classList.remove('hide-box-cta-widget'); } } }, { key: "set_cookie", value: function set_cookie(name, value, days) { var date = new Date(); date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000); document.cookie = "".concat(name, "=").concat(value, "; expires=").concat(date.toUTCString(), "; path=/"); } }, { key: "get_cookie", value: function get_cookie(name) { var value = "; ".concat(document.cookie); var parts = value.split("; ".concat(name, "=")); if (parts.length === 2) return parts.pop().split(';').shift(); return null; } }]); }(); /* harmony default export */ __webpack_exports__["default"] = (hide_box_cta_widget); /***/ }), /***/ "./components/calculator-widget.js": /*!*****************************************!*\ !*** ./components/calculator-widget.js ***! \*****************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ priceCalculatorWidget: function() { return /* binding */ priceCalculatorWidget; } /* harmony export */ }); var priceCalculatorWidget = function priceCalculatorWidget() { var calculatorWidget = document.querySelector('.js-calc-widget'); if (!calculatorWidget) return; var arrowIncrement = document.querySelector('.js-btn-page-increment'); var arrowDecrement = document.querySelector('.js-btn-page-decrement'); var inputToUpdate = document.getElementById('number-of-pages'); arrowIncrement.addEventListener('click', function () { if (inputToUpdate.value === "") { inputToUpdate.value = 1; } else { inputToUpdate.value = parseInt(inputToUpdate.value) + 1; } }); arrowDecrement.addEventListener('click', function () { if (inputToUpdate.value === "") { inputToUpdate.value = 1; } else if (parseInt(inputToUpdate.value) > 1) { inputToUpdate.value = parseInt(inputToUpdate.value) - 1; } }); }; /***/ }), /***/ "./components/calculator.js": /*!**********************************!*\ !*** ./components/calculator.js ***! \**********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ priceCalculator: function() { return /* binding */ priceCalculator; } /* harmony export */ }); /* provided dependency */ var jQuery = __webpack_require__(/*! jquery */ "jquery"); /* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery"); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function priceCalculator() { // Check if .calc-form exists var calcForm = document.querySelector('.calc-form'); if (calcForm) { var legends = function legends() { var radioLegends = document.querySelectorAll('.gfield--type-radio legend'); radioLegends.forEach(function (legend) { // Create a new div element var wrapperDiv = document.createElement('div'); // Add the class "legend-wrap" to the wrapper div wrapperDiv.classList.add('legend-wrap'); // Wrap the legend element with the new div legend.parentNode.insertBefore(wrapperDiv, legend); wrapperDiv.appendChild(legend); }); }; // Function to get values and handle changes for a given fieldset var handleFieldsetChanges = function handleFieldsetChanges(fieldsetId) { var fieldset = document.getElementById(fieldsetId); fieldset.querySelectorAll('input').forEach(function (input) { // check the radio default choice and set the output for data layer var checkedRadio = fieldset.querySelector('input[type="radio"]:checked'); var label = fieldset.querySelector("label[for=\"".concat(checkedRadio.id, "\"]")); var labelText = label.textContent.trim(); fieldsetChanges[fieldsetId] = labelText; // on changes update the output for the data layer input.addEventListener('change', function (event) { var inputId = event.target.id; var label = document.querySelector("label[for=\"".concat(inputId, "\"]")); var fieldsetChange = label.textContent.trim(); fieldsetChanges[fieldsetId] = fieldsetChange; // Store the change for this fieldset console.log("Change in fieldset ".concat(fieldsetId, ": ").concat(fieldsetChange)); }); }); }; // Iterate over each fieldset to collect checked labels and set up event listeners var getValues = function getValues() { // get values for first page var wTypeSelection = wTypeId.options[wTypeId.selectedIndex].innerText; var nPagesVal = nPages.value; var hRateVal = hRate.value; // handle data dynamically for second page var eventData = {}; fieldsets.forEach(function (fieldset) { var fieldsetId = fieldset.id; var legendText = fieldset.querySelector('legend').textContent.trim(); var formattedLegend = legendText.replace(/[^a-zA-Z0-9]+(.|$)/g, function (match, chr) { return chr ? chr.toUpperCase() : ''; }).replace(/^./, function (match) { return match.toLowerCase(); }); eventData[formattedLegend] = fieldsetChanges[fieldsetId] || 'No radio button checked'; }); // console.log({...eventData}); // console.log(wTypeSelection); // console.log(nPagesVal); // console.log(hRateVal); // console.log(stepN); // Pushing variables to dataLayer window.dataLayer = window.dataLayer || []; window.dataLayer.push(_objectSpread({ 'event': stepN, 'websiteType': wTypeSelection, // Replace with actual data 'landingPages': nPagesVal, // Replace with actual data 'hourlyRate': hRateVal }, eventData)); }; jQuery(document).on('gform_post_render', function (event, form_id, current_page) { // if current page is 2 activate page 1 if (current_page == 2) { legends(); setTimeout(function () { $(".gform_page[id$=_1]").addClass('on'); }, 1000); setTimeout(function () { $(".gform_page[id$=_1]").addClass('on'); }, 100); // if current page is 1 activate page 2 } else if (current_page == 1) { legends(); setTimeout(function () { $(".gform_page[id$=_2]").addClass('on'); }, 600); setTimeout(function () { $(".gform_page[id$=_2]").addClass('on'); }, 100); } }); // data layers for google var formWrap = document.querySelector('.calc-form_wrapper .gform_page '); var secPage = formWrap.parentElement.children[1]; // const lastPage = formWrap.parentElement.children[2]; // Get the next button of the second page var buttonNext = secPage.querySelector(".gform_next_button"); // Get the submit button // const buttonSubmit = lastPage.querySelector(".gform_next_button"); // Get the first page input (IDs differs per domain - check LIVE) var wTypeId = document.getElementById('input_12_15'); var nPages = document.getElementById('input_12_16'); var hRate = document.getElementById('input_12_10'); // Get the Second page radio fieldsets (ID differs per domain - check LIVE) var fieldsetContainer = secPage; var fieldsets = fieldsetContainer.querySelectorAll('fieldset'); // Object to store changes for each fieldset var fieldsetChanges = {}; fieldsets.forEach(function (fieldset) { var fieldsetId = fieldset.id; handleFieldsetChanges(fieldsetId); }); var stepN = ""; if (buttonNext) { buttonNext.addEventListener('click', function () { stepN = "website_calculator_form_step1"; getValues(); }); } jQuery(document).on('gform_confirmation_loaded', function (event, formId) { if (formId == 12 || formId == 16) { stepN = "website_calculator_form_finish"; getValues(); } }); var customSpinners = calcForm.querySelectorAll('.calc-custom-spin'); customSpinners.forEach(function (spinner) { var elem = spinner.querySelector('.ginput_container_number'); var field = spinner.querySelector('input'); var upArrow = document.createElement('span'); upArrow.className = 'spin-arrows up'; elem.prepend(upArrow); var downArrow = document.createElement('span'); downArrow.className = 'spin-arrows down'; elem.append(downArrow); downArrow.addEventListener('click', function () { var currentVal = parseCurrencyToCents(field.value); var newVal = currentVal - 500; var formatVal = formatCentsAsCurrency(newVal); if (newVal > field.min * 100) { field.value = formatVal; } else { field.value = formatCentsAsCurrency(field.min * 100); } var event = new Event('change'); field.dispatchEvent(event); }); upArrow.addEventListener('click', function () { var currentVal = parseCurrencyToCents(field.value); var newVal = currentVal + 500; var formatVal = formatCentsAsCurrency(newVal); if (newVal < field.max * 100) { field.value = formatVal; } else { field.value = formatCentsAsCurrency(field.max * 100); } var event = new Event('change'); field.dispatchEvent(event); }); field.addEventListener('change', function () { var newVal = parseCurrencyToCents(field.value); if (newVal > field.max * 100) { field.value = formatCentsAsCurrency(field.max * 100); var event = new Event('change'); field.dispatchEvent(event); } if (newVal < field.min * 100) { field.value = formatCentsAsCurrency(field.min * 100); var _event = new Event('change'); field.dispatchEvent(_event); } }); }); var parseCurrencyToCents = function parseCurrencyToCents(currencyStr) { // Remove currency symbols and whitespace var cleanStr = currencyStr.replace(/[$\s]/g, ''); // Determine which format is being used if (cleanStr.includes(',') && cleanStr.includes('.')) { // If both separators exist, check which comes first var commaPos = cleanStr.indexOf(','); var dotPos = cleanStr.indexOf('.'); if (commaPos < dotPos) { // Format: 1,234.56 cleanStr = cleanStr.replace(/,/g, ''); } else { // Format: 1.234,56 cleanStr = cleanStr.replace(/\./g, '').replace(',', '.'); } } else if (cleanStr.includes(',')) { // Just comma - could be decimal or thousands if (cleanStr.lastIndexOf(',') > cleanStr.length - 4) { // Comma is decimal separator cleanStr = cleanStr.replace(',', '.'); } else { // Comma is thousands separator cleanStr = cleanStr.replace(/,/g, ''); } } // Convert to float and then to cents return Math.round(parseFloat(cleanStr) * 100); }; var formatCentsAsCurrency = function formatCentsAsCurrency(cents) { return "$".concat((cents / 100).toFixed(2)); }; } } /***/ }), /***/ "./components/case-studies.js": /*!************************************!*\ !*** ./components/case-studies.js ***! \************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": function() { return /* binding */ moreCaseStudies; } /* harmony export */ }); /* provided dependency */ var jQuery = __webpack_require__(/*! jquery */ "jquery"); /* eslint-disable linebreak-style */ /* eslint-disable import/no-cycle */ /* eslint-disable camelcase */ /* eslint-disable no-undef */ /* eslint-disable linebreak-style */ function moreCaseStudies(ajax) { var $other = jQuery('.js-other-case-studies'); var $offset = $other.data('offset'); var $loadMore = jQuery('.js-load-more-case-studies'); var $pagination = jQuery('.js-pagination-case-studies'); var $perPage = $other.data('perpage'); var $foundPosts = $other.data('found-posts'); var $caseStudies = $other.data('case-studies'); /* This should begin at posts_per_page value this is specific for this section only */ var totalCount = 9; // animated class var $animatedClass = 'loadmore-animated'; function get_posts() { var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var posts_per_page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 9; var category_id = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var filter = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; $loadMore.addClass('loading'); jQuery.ajax({ url: "".concat(ajax.admin_url, "?action=more_case_studies"), method: 'GET', dataType: 'json', data: { offset: offset, posts_per_page: posts_per_page, case_studies: $caseStudies, ajax: true }, success: function success(response) { jQuery('.js-message-case-studies').html(null); if (response !== false) { // increment total count totalCount += response.count; if (filter) { $other.html(null); } $other.append(response.output).animate({ opacity: 1 }, 200, function () { jQuery(".".concat($animatedClass)).animate({ opacity: 1 }, 200); jQuery(".".concat($animatedClass)).each(function (i, obj) { jQuery(obj).removeClass(".".concat($animatedClass)); var $moreData = jQuery('.jsCaseStudiesLoadedMore'); var $mainCont = jQuery('.jsMainCont'); $mainCont.append($moreData.html()); $moreData.remove(); }); }); $loadMore.removeClass('loading'); if (response.count === 0 || response.count < posts_per_page) { $loadMore.hide(); $pagination.hide(); $other.removeClass('hidden'); } } if (response === false || response.output === false) { $loadMore.hide(); $pagination.hide(); $other.removeClass('hidden'); // jQuery('.js-message-case-studies').html('No More Posts'); } } }); } $loadMore.on('click', function (e) { e.preventDefault(); $offset += $other.data('perpage'); get_posts($offset, $perPage); }); } /***/ }), /***/ "./components/case-study-tabs.js": /*!***************************************!*\ !*** ./components/case-study-tabs.js ***! \***************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": function() { return /* binding */ caseStudyTabs; } /* harmony export */ }); /* provided dependency */ var jQuery = __webpack_require__(/*! jquery */ "jquery"); function caseStudyTabs() { var $caseTabs = jQuery(".js-case-study-tabs"); if ($caseTabs.length > 0) { $caseTabs.each(function (i, obj) { var $this = jQuery(this); // tabs panel click var $tabsPanel = $this.find(".js-tabs-nav-item"); $tabsPanel.on('click', function (e) { // e.stopPropagation(); var $tabItem = jQuery(this); var tabItemIndex = $tabItem.attr('data-img-index'); var $tab = $tabItem.parents(".js-tab"); if ($tab.find(".js-img-tab[data-tab-index='".concat(tabItemIndex, "']")).length > 0) { var $imgSrc = $tab.find(".js-img-tab[data-tab-index='".concat(tabItemIndex, "']")).attr('data-src'); $this.find('.l-tbnav-v1__img').animate({ opacity: 0 }, 200, function () { $this.find('.js-left-img').attr("src", $imgSrc); $this.find('.js-left-img').attr("data-src", $imgSrc); $this.find('.l-tbnav-v1__img').animate({ opacity: 1 }, 200); }); } }); }); } } /***/ }), /***/ "./components/conv-calc.js": /*!*********************************!*\ !*** ./components/conv-calc.js ***! \*********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": function() { return /* binding */ conversionsCalculator; } /* harmony export */ }); function calculate() { /** * Getting all necessary stuff. */ var calc = document.querySelector('.js-conv-calculator'); var results = document.querySelector('.js-conv-results'); var conv = document.querySelector('#js-conv-field'); var visits = document.querySelector('#js-visits-field'); var answer = document.querySelector('.js-answer'); var good = document.querySelector('.js-good'); var bad = document.querySelector('.js-bad'); var calcAgain = document.querySelector('.js-calc-again'); /** * Calculate the final result. * @type {number} */ var result = Number((conv.value / visits.value * 100).toFixed(2)); /** * Hiding calculator, showing results and populating results div. */ calc.classList.add('hidden'); results.classList.remove('hidden'); answer.innerHTML = "".concat(result, "%"); if (Number(conv.value) && Number(visits.value)) { window.dataLayer = window.dataLayer || []; window.dataLayer.push({ 'event': 'conversion_calculator_form', 'conversions': conv.value, 'visits': visits.value }); } /** * Determine which result to show good or bad. */ switch (true) { case result > 7: good.classList.remove('hidden'); break; case result < 7: bad.classList.remove('hidden'); break; case result === 7: good.classList.remove('hidden'); bad.classList.remove('hidden'); break; default: break; } /** * Calculate again function resetting inputs and hiding results. */ if (calcAgain) { calcAgain.addEventListener('click', function () { calc.classList.remove('hidden'); results.classList.add('hidden'); good.classList.add('hidden'); bad.classList.add('hidden'); conv.value = ''; visits.value = ''; result = 0; }); } } /** * Main function included in index.js. */ function conversionsCalculator() { /** * Calling calculate on click on form submit */ var form = document.getElementById('conv-calc'); if (form) { form.addEventListener('submit', function (e) { e.preventDefault(); calculate(); }); } } /***/ }), /***/ "./components/expand-image.js": /*!************************************!*\ !*** ./components/expand-image.js ***! \************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ expandImage: function() { return /* binding */ expandImage; } /* harmony export */ }); /* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery"); function expandImage() { $(".ba-expander .c-qz-btn").each(function () { $(this).click(function () { triggerExpandImage($(this)); }); }); var currentUrlHash = $(location).prop('hash').substr(1); var tabs = $('.ba-single .js-tabs-panel'); tabs.each(function () { var tab = $(this); var projects = tab.find('.ba-single__project'); var tabsID = tab.attr('id'); var tabNavItemControls = $('.ba-single .js-tabs-nav-item[aria-controls=' + tabsID + ']'); if (currentUrlHash) { closeTabs(tab, tabNavItemControls); } projects.each(function () { var _this = this; var projectHash = $(this).find('.ba-single__project-hash').attr('name'); if (currentUrlHash == projectHash) { $(this).closest('.lm-col').addClass('on'); $(this).closest('.lm-col').prevAll().addClass('on'); if (tabsID == $(this).find('.c-qz-btn').closest('.js-tabs-panel').attr('id')) { openTab(tab, tabNavItemControls); setTimeout(function () { $(_this).find('.c-qz-btn').click(); }, 1500); setTimeout(function () { $(_this).find(".c-image").css('max-height', 'none'); }, 2100); } } }); }); function closeTabs(tab, tabNavItemControls) { tab.removeClass('is-active'); tab.attr('aria-hidden', 'false'); tabNavItemControls.removeClass('is-active'); tabNavItemControls.attr('aria-selected', 'false'); } function openTab(tab, tabNavItemControls) { tab.addClass('is-active'); tab.attr('aria-hidden', 'ture'); tabNavItemControls.addClass('is-active'); tabNavItemControls.attr('aria-selected', 'ture'); } function triggerExpandImage(trigger) { var expanders = document.querySelectorAll('.ba-single__project .ba-expander'); var triggerHref = trigger[0].dataset.url; expanders.forEach(function (expandersBtn) { if (expandersBtn.id === triggerHref) { var expandersBtnPrev = expandersBtn.previousElementSibling; expandersBtnPrev.parentElement.parentElement.classList.add("on"); var height = expandersBtn.previousElementSibling.querySelector(".c-image__media").offsetHeight; expandersBtnPrev.style.maxHeight = height + 'px'; expandersBtnPrev.parentElement.classList.add("is-expanded"); expandersBtn.querySelector(".c-btn").classList.add("on"); setTimeout(function () { expandersBtnPrev.previousElementSibling.parentElement.scrollIntoView({}); }, 10); } }); if (trigger.hasClass("on")) { trigger.parent().prev().css('max-height', ''); trigger.removeClass("on"); trigger.parent().parent().removeClass("is-expanded"); trigger.parent().prev().get(0).scrollIntoView(); } else { var height = trigger.parent().prev().find(".c-image__media").outerHeight(); trigger.parent().prev().css('max-height', height); trigger.addClass("on"); trigger.parent().parent().addClass("is-expanded"); } } /* TOC collapser */ var collapsers = document.querySelectorAll('.ba-toc__title'); if (collapsers) { collapsers.forEach(function (collapser) { collapser.addEventListener('click', function (e) { collapser.classList.toggle('is-active'); }); }); } // Function to scroll up by amount function scrollUpBy(amount) { $('.menu-outside').animate({ scrollTop: $('.menu-outside').scrollTop() + amount }, 800); // 800ms duration for the scroll animation } // Load more $(".lm-ba").each(function () { $(this).click(function () { console.log($('.menu-outside').scrollTop()); $(this).closest('.lm-col').next().addClass('on'); $(this).closest('.c-btn__wrap').addClass("frrrc"); scrollUpBy(200); }); }); } /***/ }), /***/ "./components/fake-menu.js": /*!*********************************!*\ !*** ./components/fake-menu.js ***! \*********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ fakeFooterMenu: function() { return /* binding */ fakeFooterMenu; } /* harmony export */ }); function fakeFooterMenu() { var fakeMenu = document.getElementById('menu-footer-menu-js'); if (fakeMenu) { fakeMenu.addEventListener('click', handleClick); fakeMenu.addEventListener('auxclick', handleAuxClick); fakeMenu.addEventListener('contextmenu', handleContextMenu); } function handleClick(event) { if (event.target.tagName === 'A') { event.preventDefault(); var url = event.target.getAttribute('data-mask-link'); window.location.href = url; } } function handleAuxClick(event) { if (event.target.tagName === 'A' && event.button === 1) { event.preventDefault(); var url = event.target.getAttribute('data-mask-link'); window.open(url, '_blank'); } } function handleContextMenu(event) { if (event.target.tagName === 'A') { var url = event.target.getAttribute('data-mask-link'); window.open(url, '_blank'); } } } /***/ }), /***/ "./components/foot-accordion.js": /*!**************************************!*\ !*** ./components/foot-accordion.js ***! \**************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ footAccordion: function() { return /* binding */ footAccordion; } /* harmony export */ }); /* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery"); function footAccordion() { if ($(window).width() < 575) { $(".temp-accordion .widgettitle").each(function () { $(this).on('touchstart', function () { if ($(this).hasClass('active')) { $(this).removeClass('active').next().removeClass('active'); } else { $(".widgettitle").removeClass('active').next().removeClass('active'); $(this).addClass('active').next().addClass('active'); } }); }); } else { $(".widgettitle").removeClass('active').next().removeClass('active'); } } /***/ }), /***/ "./components/footer-hover.js": /*!************************************!*\ !*** ./components/footer-hover.js ***! \************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ footerHover: function() { return /* binding */ footerHover; } /* harmony export */ }); /* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery"); function footerHover() { $(".footer-nav > .menu-item").each(function () { if ($(".footer-nav > .menu-item").hasClass("current-menu-parent")) { $(".footer-nav > .current-menu-parent").addClass('is-hover'); $(".footer-nav").mouseleave(function () { $(".footer-nav > .current-menu-parent").addClass('is-hover'); }); } else { $(".footer-nav > .menu-item:first-child").addClass('is-hover'); $(".footer-nav").mouseleave(function () { $(".footer-nav > .menu-item:first-child").addClass('is-hover'); }); } $(this).mouseenter(function () { $(this).addClass('is-hover'); }); $(this).mouseleave(function () { $(".footer-nav > .menu-item").removeClass('is-hover'); }); }); } /***/ }), /***/ "./components/g-forms.js": /*!*******************************!*\ !*** ./components/g-forms.js ***! \*******************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ gForms: function() { return /* binding */ gForms; } /* harmony export */ }); /* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery"); function gForms() { if ($(".form-section:not(.-contact)").length) { $(".form-section .form-section__inner .gform_button").wrap(""); var e = document.getElementById('gform_wrapper_7'); if (e) { var observer = new MutationObserver(function (event) { $(".form-section .form-section__inner .gform_button").wrap(""); }); observer.observe(e, { attributes: true, attributeFilter: ['class'], childList: true, characterData: false }); } var m = document.getElementById('gform_wrapper_10'); if (m) { var observer = new MutationObserver(function (event) { $(".form-section .gform_button").wrap(""); }); observer.observe(m, { attributes: true, attributeFilter: ['class'], childList: true, characterData: false }); } } if ($(".-contact").length) { $(".-contact .gform_button").wrap(""); var e = document.getElementById('gform_wrapper_7'); if (e) { var observer = new MutationObserver(function (event) { $(".-contact .gform_button").wrap(""); }); observer.observe(e, { attributes: true, attributeFilter: ['class'], childList: true, characterData: false }); } var e2 = document.getElementById('gform_wrapper_4'); if (e2) { var observer = new MutationObserver(function (event) { $(".-contact .gform_button").wrap(""); }); observer.observe(e2, { attributes: true, attributeFilter: ['class'], childList: true, characterData: false }); } } if ($(".whitepaper").length) { $(".whitepaper .gform_button").wrap(""); $(".whitepaper .gform_footer .c-btn").append(''); var e = document.getElementById('gform_wrapper_9'); if (e) { var observer = new MutationObserver(function (event) { $(".whitepaper .gform_button").wrap(""); $(".whitepaper .gform_footer .c-btn").append(''); }); observer.observe(e, { attributes: true, attributeFilter: ['class'], childList: true, characterData: false }); } } if ($(".newsletter-form").length) { $(".newsletter-form .gform_button").wrap(""); var e = document.getElementById('gform_wrapper_6'); if (e) { var observer = new MutationObserver(function (event) { $(".newsletter-form .gform_button").wrap(""); }); observer.observe(e, { attributes: true, attributeFilter: ['class'], childList: true, characterData: false }); } } if ($(".dt-subscribe__bottom").length) { $(".dt-subscribe__bottom .gform_button").wrap(""); var e = document.getElementById('gform_wrapper_8'); if (e) { var observer = new MutationObserver(function (event) { $(".dt-subscribe__bottom .gform_button").wrap(""); }); observer.observe(e, { attributes: true, attributeFilter: ['class'], childList: true, characterData: false }); } } // if ($(".single-post__content .form-section").length) { // $(".single-post__content .form-section .gform_button").wrap(""); // var e2 = document.getElementById('gform_wrapper_10'); // if(e2){ // var observer = new MutationObserver(function (event) { // $(".single-post__content .form-section .gform_button").wrap(""); // }) // observer.observe(e, { // attributes: true, // attributeFilter: ['class'], // childList: true, // characterData: false // }) // } // } } /***/ }), /***/ "./components/hero-player.js": /*!***********************************!*\ !*** ./components/hero-player.js ***! \***********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": function() { return /* binding */ heroPlayer; } /* harmony export */ }); /* provided dependency */ var jQuery = __webpack_require__(/*! jquery */ "jquery"); /* eslint-disable linebreak-style */ /* eslint-disable func-names */ /* eslint-disable no-undef */ /* eslint-disable no-param-reassign */ // const $videoCont = jQuery('.js-hero-video-cont'); function heroPlayer(selector) { var vTags = document.querySelectorAll(selector); function videoRWD() { vTags.forEach(function (vTag) { if (jQuery(vTag).is(':hidden')) { vTag.autoplay = !vTag.autoplay; } }); } /* Custom Video Controls */ function videoActions() { vTags.forEach(function (vTag) { var $videoCont = jQuery(vTag).parents('.js-video-section').find('.js-hero-video-cont'); // vanilla js cont var videoCont = $videoCont.get(0); var playAction = $videoCont.find('.btn-play').get(0); var muteAction = $videoCont.find('.btn-mute').get(0); var controlAction = $videoCont.find('.btn-control').get(0); vTag.controls = false; vTag.addEventListener('ended', function () { this.pause(); // vTag.parentElement.classList.add('is-ended'); document.querySelector('.video-hidden').classList.remove('is-enabled'); // document.querySelector('.banner-top').classList.remove('is-disabled'); vTag.currentTime = 0; playAction.classList.add('is-pause'); playAction.classList.remove('is-playing'); }, false); // pause video beore end and add contact link vTag.addEventListener('timeupdate', function () { if (this.currentTime >= 61) { this.pause(); } if (this.currentTime >= 58) { videoCont.querySelector('.invideo-link').classList.add('show'); } else { videoCont.querySelector('.invideo-link').classList.remove('show'); } }, false); function togglePlay() { if (vTag.paused || vTag.ended) { playAction.classList.add('is-playing'); playAction.classList.remove('is-pause'); vTag.parentElement.classList.remove('is-ended'); vTag.play(); } else { playAction.classList.add('is-pause'); playAction.classList.remove('is-playing'); vTag.pause(); } } function toggleMute() { vTag.muted = !vTag.muted; if (vTag.muted) { muteAction.classList.add('is-muted'); muteAction.classList.remove('is-sound'); } else { muteAction.classList.add('is-sound'); muteAction.classList.remove('is-muted'); } } function toggleControl() { if (controlAction) { vTag.controls = !vTag.controls; if (vTag.controls) { controlAction.classList.add('is-muted'); controlAction.classList.remove('is-sound'); } else { controlAction.classList.add('is-sound'); controlAction.classList.remove('is-muted'); } } } playAction.addEventListener('click', function () { togglePlay(); }); muteAction.addEventListener('click', function () { toggleMute(); }); if (controlAction) { controlAction.addEventListener('click', function () { toggleControl(); }); } }); } // Play button on the services pages function playVideo(el) { if (document.querySelectorAll(el).length > 0) { var playBtns = document.querySelectorAll(el); playBtns.forEach(function (playBtn) { playBtn.addEventListener('click', function (e) { console.log("click"); e.stopPropagation(); var $videoCont = jQuery(e.target).parents('.js-video-section').find('.js-hero-video-cont'); $videoCont.addClass('is-enabled'); document.body.classList.add('hide-scrollbar'); $videoCont.animate({ opacity: 1 }, 500); $videoCont.find('.videoPlayer .js-source1').prop('src', jQuery(playBtn).data('video-url')); $videoCont.find('.videoPlayer .js-source2').prop('src', jQuery(playBtn).data('video-url')); var vTag = $videoCont.find('.videoPlayer').get(0); vTag.load(); vTag.play(); }); }); } } function stopVideo(el) { if (document.querySelectorAll(el).length > 0) { var closeBtns = document.querySelectorAll(el); closeBtns.forEach(function (closeBtn) { closeBtn.addEventListener('click', function (e) { e.stopPropagation(); var $videoCont = jQuery(e.target).parents('.js-video-section').find('.js-hero-video-cont'); $videoCont.removeClass('is-enabled'); document.body.classList.remove('hide-scrollbar'); $videoCont.animate({ opacity: 0 }, 500); var vTag = $videoCont.find('.videoPlayer').get(0); vTag.pause(); vTag.currentTime = 0; }); }); } } if (vTags.length > 0) { videoRWD(); videoActions(); playVideo('.js-play-video'); stopVideo('.js-stop-video'); } } /***/ }), /***/ "./components/load-more-projects.js": /*!******************************************!*\ !*** ./components/load-more-projects.js ***! \******************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ loadMoreProjects: function() { return /* binding */ loadMoreProjects; } /* harmony export */ }); /* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery"); function loadMoreProjects(ajax) { $('#load_more_projects').on('click', function (e) { e.preventDefault(); var button = $('#load_more_projects'); var visible = button.attr('data-visible'); var total = button.attr('data-total'); var loadMore = button.attr('data-load_more'); var id = button.attr('data-id'); var listSection = $('#project-list'); var projectsJson = listSection.data('projects'); // console.log(projectsJson); var data = { action: 'more_blog_projects', id: id, visible: visible, loadMore: loadMore, projectsJson: projectsJson }; $.ajax({ url: ajax.admin_url, data: data, type: 'POST', beforeSend: function beforeSend(xhr) { button.addClass('loading'); }, success: function success(data) { if (data) { $(listSection).append(data.output); button.attr('data-visible', data.visible); button.removeClass('loading'); if (data.visible >= total) { button.hide(); } } else { button.hide(); } } }); }); } /***/ }), /***/ "./components/load-more-solutions.js": /*!*******************************************!*\ !*** ./components/load-more-solutions.js ***! \*******************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": function() { return /* binding */ loadMoreSolutions; } /* harmony export */ }); function loadMoreSolutions() { var tabsPanel = document.querySelectorAll('.js-load-more-content'); var loadMoreBtns = document.querySelectorAll('.js-load-more-solutions'); var tabsNavItems = document.querySelectorAll('.js-load-more-nav-item'); var selectNavItems = document.querySelectorAll('.js-load-more-dropdown'); tabsPanel.forEach(function (panel) { var boxes = panel.querySelectorAll('.l-team__item'); loadMoreBtns.forEach(function (loadMoreBtn) { tabsNavItems.forEach(function (tabsNavItem) { tabsNavItem.addEventListener('click', function () { boxes.forEach(function (box) { resetState(box, loadMoreBtn); }); }); }); selectNavItems.forEach(function (selectNavItem) { selectNavItem.addEventListener('change', function () { boxes.forEach(function (box) { resetState(box, loadMoreBtn); }); }); }); loadMoreBtn.addEventListener('click', function () { boxes.forEach(function (box) { triggerState(box, panel, loadMoreBtn); }); }); }); }); // Trigger load more state and show all items function triggerState(item, panel, btn) { item.classList.toggle('-show'); if (item.classList.contains('-show')) { btn.querySelector('.js-load-more-txt').innerHTML = "Hide Examples"; btn.classList.add('expanded'); } else { panel.scrollIntoView({ behavior: 'instant', block: 'start' }); btn.querySelector('.js-load-more-txt').innerHTML = btn.querySelector('.js-load-more-txt').dataset.label; btn.classList.remove('expanded'); } } // Reset load more state and hide shown items function resetState(item, btn) { item.classList.remove('-show'); btn.querySelector('.js-load-more-txt').innerHTML = btn.querySelector('.js-load-more-txt').dataset.label; } } /***/ }), /***/ "./components/location-accordion.js": /*!******************************************!*\ !*** ./components/location-accordion.js ***! \******************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ locationAccordion: function() { return /* binding */ locationAccordion; } /* harmony export */ }); function locationAccordion() { if (document.querySelector(".js-location") != null) { var removeOpenedContent = function removeOpenedContent(index) { accordionItem.forEach(function (item2, index2) { if (index != index2) { item2.classList.remove("active"); var descrip = item2.querySelector(".js-location-item-content"); descrip.style.height = "0px"; descrip.style.opacity = "0"; descrip.classList.remove('active'); } }); }; var accordionItem = document.querySelectorAll(".js-location-item"); accordionItem.forEach(function (item, index) { item.addEventListener("click", function () { item.classList.toggle("active"); var description = item.querySelector(".js-location-item-content"); if (item.classList.contains("active")) { description.style.height = "auto"; setTimeout(function () { description.classList.add('active'); description.style.opacity = "1"; }, 400); } else { description.style.height = "0px"; description.style.opacity = "0"; description.classList.remove('active'); } removeOpenedContent(index); }); }); } } /***/ }), /***/ "./components/logo-slider.js": /*!***********************************!*\ !*** ./components/logo-slider.js ***! \***********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ logoSlider: function() { return /* binding */ logoSlider; } /* harmony export */ }); /* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery"); function logoSlider() { var logoSlider = $(".js-slider-simple-c1"); if (logoSlider.length) { var handleSliderIntersection = function handleSliderIntersection(entries, observer) { entries.forEach(function (entry) { if (entry.isIntersecting) { var SliderClientLogos = new Swiper(".js-slider-simple-c1", { slidesPerView: "auto", // centeredSlides: true, loop: true, spaceBetween: 32, autoplay: { delay: 1, disableOnInteraction: false, waitForTransition: true }, speed: 8000 }); var SliderClientLogosRev = new Swiper(".js-slider-simple-c2", { slidesPerView: "auto", // centeredSlides: true, loop: true, spaceBetween: 32, autoplay: { delay: 1, disableOnInteraction: false, waitForTransition: true }, speed: 8000 }); } }); }; // Create an intersection observer instance var observer = new IntersectionObserver(handleSliderIntersection, { threshold: 0 }); // Select all buttons to observe logoSlider.each(function () { observer.observe(this); // Start observing each button }); } } /***/ }), /***/ "./components/menu-hover-effect.js": /*!*****************************************!*\ !*** ./components/menu-hover-effect.js ***! \*****************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ menuHover: function() { return /* binding */ menuHover; } /* harmony export */ }); function menuHover() { // Select all menu items at the first level var menuItems = document.querySelectorAll('.nav-main__links > li > a > .menu-item-title'); // Iterate through each menu item menuItems.forEach(function (item) { // Get the text content of the menu item var text = item.textContent; // Create a new string with each letter (including spaces) wrapped in a span var newContent = ''; for (var i = 0; i < text.length; i++) { if (text[i] === ' ') { newContent += "".concat(text[i], ""); } else { newContent += "".concat(text[i], ""); } } // Set the new content to the original item item.innerHTML = newContent; // Clone the item and add the 'double' class var clonedItem = item.cloneNode(true); clonedItem.classList.add('double'); // Insert the cloned item after the original item item.parentNode.insertBefore(clonedItem, item.nextSibling); }); } /***/ }), /***/ "./components/pause-hero-anim.js": /*!***************************************!*\ !*** ./components/pause-hero-anim.js ***! \***************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ pauseHeroAnimations: function() { return /* binding */ pauseHeroAnimations; } /* harmony export */ }); function pauseHeroAnimations() { var elementsToObserve = document.querySelectorAll('.home-hero .m-banner__content , .home-hero .-client-slides'); var observer = new IntersectionObserver(function (entries) { entries.forEach(function (entry) { if (entry.isIntersecting) { // Element is in the viewport, remove the 'paused' class entry.target.classList.remove('paused'); } else { // Element is not in the viewport, add the 'paused' class entry.target.classList.add('paused'); } }); }, { threshold: 0 }); elementsToObserve.forEach(function (element) { return observer.observe(element); }); } /***/ }), /***/ "./components/progress-bar.js": /*!************************************!*\ !*** ./components/progress-bar.js ***! \************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ progressBarScroll: function() { return /* binding */ progressBarScroll; } /* harmony export */ }); function progressBarScroll() { var bar = document.getElementById('singleProgressBar'); if (bar) { var progressBar = function progressBar() { var winScroll = document.body.scrollTop || document.documentElement.scrollTop, height = document.documentElement.scrollHeight - document.documentElement.clientHeight, scrolled = winScroll / height * 100; bar.style.width = scrolled + "%"; }; ; window.addEventListener('scroll', function () { progressBar(); }); } } /***/ }), /***/ "./components/read-more.js": /*!*********************************!*\ !*** ./components/read-more.js ***! \*********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": function() { return /* binding */ readMoreX; } /* harmony export */ }); function readMoreX() { // Code relevant to the industry-services.php module var tabHeads = document.querySelectorAll('.js-tab-head'); tabHeads.forEach(function (tabHead) { tabHead.addEventListener('click', function () { activateTab(tabHead); }); tabHead.addEventListener('keydown', function (event) { if (event.key === 'Enter') { activateTab(tabHead); } }); }); function activateTab(tabHead) { tabHeads.forEach(function (otherTabHead) { otherTabHead.classList.remove('is-active'); var content = otherTabHead.querySelector('.c-block__text-wrap'); if (content) { content.classList.add('-hidden'); } }); tabHead.classList.add('is-active'); var activeContent = tabHead.querySelector('.c-block__text-wrap'); if (activeContent) { activeContent.classList.remove('-hidden'); } } // Code relevant to the wrapper-content.php module var buttons = document.querySelectorAll('.full-block .c-btn'); buttons.forEach(function (button) { button.addEventListener('click', function () { var fullBlock = this.closest('.full-block'); var collapsable = fullBlock.querySelector('.collapsable.read-more-text'); // Toggle the -hidden class on the collapsable element collapsable.classList.toggle('-hidden'); // Toggle the text of the button var buttonText = this.querySelector('.-text'); buttonText.textContent = collapsable.classList.contains('-hidden') ? 'Click To Read Full Article' : 'Hide Article'; // Toggle the -active class on the button this.classList.toggle('-active'); // Scroll into view if the collapsable element is hidden if (collapsable.classList.contains('-hidden')) { fullBlock.scrollIntoView({ behavior: 'instant', block: 'start' }); } }); }); } ; /***/ }), /***/ "./components/scroller.js": /*!********************************!*\ !*** ./components/scroller.js ***! \********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ scroller24: function() { return /* binding */ scroller24; } /* harmony export */ }); function scroller24() { if (document.querySelector(".our-process24") != null) { // Function to detect if the device is touch-capable var isTouchDevice = function isTouchDevice() { return 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0; }; var scrollToMiddle = function scrollToMiddle(slideIndex) { var scrollerCenter = scroller.clientWidth / 10 * 3.5; var slideCenter = slideIndex * slideWidth + slideWidth / 2; var newScrollPosition = slideCenter - scrollerCenter; // Clamp new scroll position to prevent overscrolling scrollPosition = Math.max(0, Math.min(newScrollPosition, maxScroll)); innerScroller.style.transform = "translateX(-".concat(scrollPosition, "px)"); if (slideIndex < 1) { progressBar.style.right = "".concat(slideWidth * 1.5, "px"); } else { progressBar.style.right = "".concat((scrollPosition - slideWidth / 1.2) * -1, "px"); } console.log(slideIndex); // Add active class to clicked slide and all previous slides slides.forEach(function (slide, index) { if (index <= slideIndex) { slide.classList.add('active'); } else { slide.classList.remove('active'); } }); lastScrollPosition = scrollPosition; }; var scroller = document.querySelector('.scroller'); var innerScroller = document.querySelector('.scroller__inner'); var slides = document.querySelectorAll('.scroll-slide'); var slideWidth = slides[0].offsetWidth; // Assuming all slides have the same width var scrollPosition = 0; var maxScroll = innerScroller.scrollWidth - scroller.clientWidth; var lastScrollPosition = 0; // To track the last scroll position var progressBar = document.querySelector('.progress'); if (!isTouchDevice()) { // Mouse wheel event for horizontal scrolling with transform scroller.addEventListener('wheel', function (e) { // Calculate new scroll position based on deltaY var scrollAmount = e.deltaY; var direction = scrollAmount > 0 ? 1 : -1; // 1 for down (left scroll), -1 for up (right scroll) var remainingScroll = maxScroll - scrollPosition; // Calculate new scroll position scrollPosition += direction * 70; // Adjust multiplier for scroll speed // Clamp scroll position to prevent overscrolling scrollPosition = Math.max(0, Math.min(scrollPosition, maxScroll)); // Update transform style with the correct scroll position innerScroller.style.transform = "translateX(-".concat(scrollPosition, "px)"); // Prevent default wheel action if we're scrolling horizontally if (scrollPosition !== 0 && scrollPosition !== maxScroll) { e.preventDefault(); } // Allow normal vertical scrolling if at the start or end if (scrollPosition === 0 || scrollPosition === maxScroll) { // scroller.style.overflowY = 'auto'; } else { // scroller.style.overflowY = 'hidden'; } // Check if a slide is in the middle and update active class based on direction var scrollerCenter = scroller.clientWidth / 10 * 3.5; slides.forEach(function (slide, index) { var slideStart = index * slideWidth; var slideEnd = slideStart + slideWidth; var slideCenter = (slideStart + slideEnd) / 2; if (scrollAmount > 0 && scrollPosition + scrollerCenter >= slideStart && lastScrollPosition + scrollerCenter < slideStart) { // Scrolling down (to the left) and slide just passed the center slide.classList.add('active'); } else if (scrollAmount < 0 && scrollPosition + scrollerCenter <= slideStart && lastScrollPosition + scrollerCenter > slideStart) { // Scrolling up (to the right) and slide just passed the center slide.classList.remove('active'); } if (index < 1) { progressBar.style.right = "".concat(slideWidth * 1.5, "px"); } else { progressBar.style.right = "".concat((scrollPosition - slideWidth / 1.2) * -1, "px"); } ; }); // Update last scroll position lastScrollPosition = scrollPosition; }); // Add click event listener to each slide to scroll it into the middle slides.forEach(function (slide, index) { slide.addEventListener('click', function () { scrollToMiddle(index); }); }); } else { var updateProgressBar = function updateProgressBar() { var progress = scroller.scrollLeft / maxScroll * 1200; progressBar.style.width = "".concat(progress, "px"); }; // Listen for the scroll event to update the progress bar // Intersection Observer for touch devices var observerOptions = { root: scroller, threshold: 0.5 // Adjust this value as needed }; var observerCallback = function observerCallback(entries) { entries.forEach(function (entry) { if (entry.isIntersecting) { entry.target.classList.add('active'); } else { entry.target.classList.remove('active'); } }); }; var observer = new IntersectionObserver(observerCallback, observerOptions); slides.forEach(function (slide) { observer.observe(slide); }); scroller.addEventListener('scroll', updateProgressBar); // Initialize the progress bar on load updateProgressBar(); } } } /***/ }), /***/ "./components/site-search.js": /*!***********************************!*\ !*** ./components/site-search.js ***! \***********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ toggleSearch: function() { return /* binding */ toggleSearch; } /* harmony export */ }); /* provided dependency */ var jQuery = __webpack_require__(/*! jquery */ "jquery"); /** * Toggle search icon with accessibility in mind * @param {string} el - selector for adding an active class */ function toggleSearch(el) { var btn = document.querySelector(el); var searchForm = document.querySelector('.jsSearchForm'); var searchInput = document.querySelector('.jsSearchProd'); var searchBtn = document.querySelector('.jsSearchBtn'); var $search_wrapper = jQuery('.jsAutoSearchParent'); if (btn) { btn.addEventListener('click', function (event) { event.preventDefault(); if (btn.getAttribute('aria-expanded') === 'false') { openSearch(); } else { closeSearch(); } }); if (searchInput) { var logFocus = function logFocus(event) { searchInput.value = ''; }; searchInput.addEventListener('focus', logFocus); } } /* Check outside click */ document.addEventListener('click', function (event) { if (!event.target.closest('.c-site-search')) { // click outside if (btn) { if (btn.getAttribute('aria-expanded') === 'true') { closeSearch(); } } } else { // click inside } }, false); function closeSearch() { searchForm.classList.remove('is-active'); btn.setAttribute('aria-expanded', 'false'); $search_wrapper.removeClass('active'); searchInput.setAttribute('tabindex', '-1'); searchBtn.setAttribute('tabindex', '-1'); } function openSearch() { searchForm.classList.add('is-active'); btn.setAttribute('aria-expanded', 'true'); searchInput.removeAttribute('tabindex'); searchInput.value = ''; searchBtn.removeAttribute('tabindex'); // set focus jQuery('.jsSearchProd').focus(); } } /***/ }), /***/ "./components/sticky-whitepaper.js": /*!*****************************************!*\ !*** ./components/sticky-whitepaper.js ***! \*****************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ stickyPopUp: function() { return /* binding */ stickyPopUp; } /* harmony export */ }); /* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery"); function stickyPopUp() { var popupM = document.querySelector('.m-popup'); if (popupM) { // Function to toggle 'on' class on elements var toggleOnClass = function toggleOnClass() { popupM.classList.toggle('on'); popupT.classList.toggle('on'); if (otherPop) { otherPop.classList.toggle('other'); } }; var addOnClass = function addOnClass() { popupM.classList.add('on'); popupT.classList.add('on'); if (otherPop) { otherPop.classList.toggle('other'); } }; // Function to remove 'on' class from elements var removeOnClass = function removeOnClass() { popupM.classList.remove('on'); popupT.classList.remove('on'); if (otherPop) { otherPop.classList.remove('other'); } }; // Function to handle closing the popup var handleClose = function handleClose() { removeOnClass(); localStorage.setItem('popupClosed', 'true'); // Save closing action in local storage }; // Function to check local storage and show popup if not closed var checkLocalStorage = function checkLocalStorage() { if (!localStorage.getItem('popupClosed')) { setTimeout(addOnClass, 5000); // 5 seconds timeout } }; // Event listener for clicking popup toggle // Define the callback function for the Intersection Observer var handleIntersection = function handleIntersection(entries, observer) { entries.forEach(function (entry) { if (entry.isIntersecting) { // Add the 'hidden' class when the footer is in the viewport popupT.classList.add('shift-up'); popupM.classList.add('shift-up'); } else { // Remove the 'hidden' class when the footer is out of the viewport popupT.classList.remove('shift-up'); popupM.classList.remove('shift-up'); } }); }; // Create a new Intersection Observer instance var inputMail = $('.m-popup [type="email"]'); var otherPop = document.querySelector('.box-holder'); inputMail.parent().prepend(''); var popupT = document.querySelector('.popup-toggle'); popupM.classList.remove('off'); popupT.classList.remove('off'); popupT.addEventListener('click', toggleOnClass); // Event listener for clicking close button document.querySelector('.popup-wrap .close').addEventListener('click', handleClose); // Check local storage on page load checkLocalStorage(); var observer = new IntersectionObserver(handleIntersection, { root: null, // Use the viewport as the root threshold: 0 // Trigger the callback as soon as any part of the footer is visible }); // Target the footer element var footer = document.querySelector('.copy-privacy'); // Start observing the footer observer.observe(footer); } // sticky RaQ CTA // window.addEventListener('scroll', function () { // // Select the .box-cta element // const boxCTA = document.querySelector('.box-cta.-site-wide'); // // // Check if the cta is there // if (boxCTA) { // // If the scroll position is greater than 1000px, add the 'show' class // if (window.scrollY > 1000) { // boxCTA.classList.add('show'); // } else { // // otherwise // // boxCTA.classList.remove('show'); // } // } // }); // Variable to track if the popup has already been triggered var popupTriggered = false; // Variable to track user interaction (scroll or click) var interactionDetected = false; // Timer variable var interactionTimer; // Function to show the popup function showPopup() { var boxCTA = document.querySelector('.box-cta.-site-wide'); if (boxCTA) { boxCTA.classList.add('show'); } } // Event listener for scroll window.addEventListener('scroll', function () { if (!interactionDetected) { interactionDetected = true; startTimer(); } }); // Event listener for click window.addEventListener('click', function () { if (!interactionDetected) { interactionDetected = true; startTimer(); } }); // Function to start the timer function startTimer() { if (!popupTriggered) { interactionTimer = setTimeout(function () { popupTriggered = true; showPopup(); }, 60000); // 60 seconds } } } /***/ }), /***/ "./components/tabs-underline.js": /*!**************************************!*\ !*** ./components/tabs-underline.js ***! \**************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ tabsUnderline: function() { return /* binding */ tabsUnderline; } /* harmony export */ }); function tabsUnderline() { var tabNavs = document.querySelectorAll('.js-tbnav'); if (window.innerWidth > 1024) { var moveTabsUnderline = function moveTabsUnderline(elem, i) { if (elem && i >= 0) { elem.style.transform = 'translate3d(' + i * 100 + '%,0,0)'; } }; if (tabNavs.length > 0) { tabNavs.forEach(function (tabNav) { var tabs = tabNav.querySelectorAll('.js-tabs-nav-item'); var tabsUndeline = tabNav.querySelector('.js-tabs-nav-underline'); tabs.forEach(function (item, i) { item.addEventListener('click', function () { moveTabsUnderline(tabsUndeline, i); }); }); }); } } } /***/ }), /***/ "./components/toggle-element.js": /*!**************************************!*\ !*** ./components/toggle-element.js ***! \**************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ toggleElement: function() { return /* binding */ toggleElement; } /* harmony export */ }); /* provided dependency */ var jQuery = __webpack_require__(/*! jquery */ "jquery"); function toggleElement() { jQuery("#js-toggleTrigger").click(function () { jQuery("#js-toggleElement ").toggleClass('open'); jQuery(this).toggleClass('is-active'); }); jQuery("#js-toggleTrigger").mouseenter(function () { jQuery("#js-toggleElement ").addClass('open'); jQuery(this).addClass('is-active'); }); jQuery("#js-toggleElement").mouseleave(function () { jQuery(this).removeClass('open'); jQuery("#js-toggleTrigger").removeClass('is-active'); }); } /***/ }), /***/ "./function-calls/accordions.js": /*!**************************************!*\ !*** ./function-calls/accordions.js ***! \**************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ callAccordions: function() { return /* binding */ callAccordions; } /* harmony export */ }); /* harmony import */ var _accordions_accordions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accordions/accordions */ "./function-calls/accordions/accordions.js"); var callAccordions = function callAccordions() { (0,_accordions_accordions__WEBPACK_IMPORTED_MODULE_0__.createAccordions)(); }; /***/ }), /***/ "./function-calls/accordions/accordions.js": /*!*************************************************!*\ !*** ./function-calls/accordions/accordions.js ***! \*************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ createAccordions: function() { return /* binding */ createAccordions; } /* harmony export */ }); /* harmony import */ var _library_tabs_accordions_DSMPAccordions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../library/tabs-accordions/DSMPAccordions */ "./library/tabs-accordions/DSMPAccordions.js"); var accordionID = 'js-acc'; var accordionSelector = '.js-acc-wrapper'; var accordionItems = document.querySelectorAll(accordionSelector); var createAccordions = function createAccordions() { var accordions = []; var accordionOptions = []; accordionItems.forEach(function (acc, i) { var accID = "".concat(accordionID, "-").concat(i); var callID = "#".concat(accID); acc.setAttribute('id', accID); accordions[i] = new _library_tabs_accordions_DSMPAccordions__WEBPACK_IMPORTED_MODULE_0__["default"](callID); }); }; /***/ }), /***/ "./function-calls/box-cta-position.js": /*!********************************************!*\ !*** ./function-calls/box-cta-position.js ***! \********************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ boxCtaPosition: function() { return /* binding */ boxCtaPosition; } /* harmony export */ }); function boxCtaPosition() { var updateBoxCtaPosition = function updateBoxCtaPosition() { var tocContainer = document.querySelector("#ez-toc-container"); var progressBar = document.querySelector("#singleProgressBar"); var boxCta = document.querySelector(".site-footer .box-cta"); if (boxCta && (tocContainer || progressBar)) { var tocHeight = tocContainer ? tocContainer.offsetHeight : 0; var progressHeight = progressBar ? progressBar.offsetHeight : 0; var totalHeight = tocHeight + progressHeight; boxCta.style.setProperty("--bottom-position", "".concat(totalHeight, "px")); } }; var mutationObserver = new MutationObserver(function () { updateBoxCtaPosition(); }); var observeSizeChanges = function observeSizeChanges(element) { if (element) { var resizeObserver = new ResizeObserver(function () { updateBoxCtaPosition(); }); resizeObserver.observe(element); } }; mutationObserver.observe(document.body, { childList: true, subtree: true }); updateBoxCtaPosition(); observeSizeChanges(document.querySelector("#ez-toc-container")); observeSizeChanges(document.querySelector("#singleProgressBar")); } /***/ }), /***/ "./function-calls/sliders.js": /*!***********************************!*\ !*** ./function-calls/sliders.js ***! \***********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ callSliders: function() { return /* binding */ callSliders; } /* harmony export */ }); /* harmony import */ var _sliders_slider_dsbls__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sliders/slider-dsbls */ "./function-calls/sliders/slider-dsbls.js"); /* harmony import */ var _sliders_slider_simple__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sliders/slider-simple */ "./function-calls/sliders/slider-simple.js"); /* harmony import */ var _sliders_slider_advanced__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sliders/slider-advanced */ "./function-calls/sliders/slider-advanced.js"); /* harmony import */ var _sliders_slider_ba__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sliders/slider-ba */ "./function-calls/sliders/slider-ba.js"); /* harmony import */ var _sliders_slider_vertical__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sliders/slider-vertical */ "./function-calls/sliders/slider-vertical.js"); /* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery"); var callSliders = function callSliders() { (0,_sliders_slider_dsbls__WEBPACK_IMPORTED_MODULE_0__.dsblsSlider)(); (0,_sliders_slider_simple__WEBPACK_IMPORTED_MODULE_1__.simpleSliders)(); (0,_sliders_slider_advanced__WEBPACK_IMPORTED_MODULE_2__.advancedSliders)(); (0,_sliders_slider_ba__WEBPACK_IMPORTED_MODULE_3__.baSlider)(); (0,_sliders_slider_vertical__WEBPACK_IMPORTED_MODULE_4__.vSlider)(); var sliderInd = $(".js-slider-ind"); if (sliderInd) { var handleSliderInd = function handleSliderInd(entries, observer) { entries.forEach(function (entry) { if (entry.isIntersecting) { var sliderIndustry = new Swiper(".js-slider-ind", { slidesPerView: 5, spaceBetween: 0, loop: false, breakpoints: { 575: { slidesPerView: 5, spaceBetween: 0, loop: false, slideToClickedSlide: true, threshold: 20 } } }); observer.unobserve(entry.target); } }); }; // Create an intersection observer instance var observer = new IntersectionObserver(handleSliderInd, { threshold: 0 }); // Select all buttons to observe sliderInd.each(function () { observer.observe(this); // Start observing each slider }); } }; /***/ }), /***/ "./function-calls/sliders/slider-advanced.js": /*!***************************************************!*\ !*** ./function-calls/sliders/slider-advanced.js ***! \***************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ advancedSliders: function() { return /* binding */ advancedSliders; } /* harmony export */ }); /* harmony import */ var _library_sliders_swiper_with_tabs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../library/sliders/swiper-with-tabs */ "./library/sliders/swiper-with-tabs.js"); /* harmony import */ var _library_sliders_slider_options_autoplay__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../library/sliders/slider-options/autoplay */ "./library/sliders/slider-options/autoplay.js"); /* harmony import */ var _library_sliders_slider_options_lazy__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../library/sliders/slider-options/lazy */ "./library/sliders/slider-options/lazy.js"); /* harmony import */ var _library_sliders_slider_options_breakpoints__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../library/sliders/slider-options/breakpoints */ "./library/sliders/slider-options/breakpoints.js"); /* harmony import */ var _library_sliders_slider_options_navigation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../library/sliders/slider-options/navigation */ "./library/sliders/slider-options/navigation.js"); /* harmony import */ var _utils_u_types__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils/u_types */ "./utils/u_types.js"); /* harmony import */ var _library_sliders_slider_options_loop__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../library/sliders/slider-options/loop */ "./library/sliders/slider-options/loop.js"); /* harmony import */ var _library_sliders_slider_options_slide_to_clicked_slide__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../library/sliders/slider-options/slide-to-clicked-slide */ "./library/sliders/slider-options/slide-to-clicked-slide.js"); /** * Advanced slider type */ // config selectors only here var advancedName = 'js-slider-advanced'; var advSliderSel = '.js-slider-advanced'; var advSliderTabs = '.l-slider-nav'; // find those selectors var advSliderList = document.querySelectorAll(advSliderSel); var advancedSliders = function advancedSliders() { // loop through sliders and add ID's to it var advSliderOptions = []; var advSliders = []; var sliderTabOptions = []; var advSliderNav = []; var sliderNav; var advSliderThumbs = []; var sliderThumbOptions = []; var beforeAfterThumbSlider = null; advSliderList.forEach(function (slider, i) { advSliderOptions[i] = { centeredSlides: true, observer: true, observeParents: true, calculateHeight: true, pagination: { el: '.m-slider__pagination', clickable: true } }; sliderTabOptions[i] = { item: '.js-nav__item', active: 'is-active', trigger: 'click' }; if (slider.classList.contains('js-before-after')) { sliderThumbOptions[i] = { slidesPerView: 'auto', spaceBetween: 10, centeredSlides: true, loop: true, slideToClickedSlide: true, observer: true, observeParents: true }; } else { sliderThumbOptions[i] = { spaceBetween: 10, slidesPerView: 'auto', freeMode: true, threshold: 10, watchSlidesProgress: true, wrapperClass: 'c-slider-nav', observer: true, observeParents: true }; } var isThumbs = (0,_utils_u_types__WEBPACK_IMPORTED_MODULE_5__.u_parseBool)(slider.getAttribute('data-slider-thumbs')); var sliderID = "".concat(advancedName, "-").concat(i); slider.setAttribute('id', sliderID); var sliderParent = slider.closest('.m-slider'); if (sliderParent) { sliderNav = sliderParent.querySelector(advSliderTabs); } var sliderThumbsSelector; if (sliderNav) { if (isThumbs) { var sliderThumbsID = 'js-slider-advanced-thumbs-' + i; sliderNav.setAttribute('id', sliderThumbsID); sliderThumbsSelector = '#' + sliderThumbsID; } else { var sliderTabID = 'js-slider-advanced-nav-' + i; sliderNav.setAttribute('id', sliderTabID); sliderTabOptions[i].element = '#' + sliderTabID; } } advSliderOptions[i] = (0,_library_sliders_slider_options_loop__WEBPACK_IMPORTED_MODULE_6__.isLoopOn)(slider, advSliderOptions[i]); advSliderOptions[i] = (0,_library_sliders_slider_options_autoplay__WEBPACK_IMPORTED_MODULE_1__.isAutoPlayOn)(slider, advSliderOptions[i]); advSliderOptions[i] = (0,_library_sliders_slider_options_lazy__WEBPACK_IMPORTED_MODULE_2__.isLazyLoadOn)(slider, advSliderOptions[i]); advSliderOptions[i] = (0,_library_sliders_slider_options_breakpoints__WEBPACK_IMPORTED_MODULE_3__.isBreakpointsOn)(slider, advSliderOptions[i]); advSliderOptions[i] = (0,_library_sliders_slider_options_slide_to_clicked_slide__WEBPACK_IMPORTED_MODULE_7__.isSlideToClicedSlideOn)(slider, advSliderOptions[i]); // .m-slider parent is hardcoded in isNavigationOn options advSliderOptions[i] = (0,_library_sliders_slider_options_navigation__WEBPACK_IMPORTED_MODULE_4__.isNavigationOn)(slider, advSliderOptions[i], advancedName, i); if (isThumbs) { advSliderThumbs[i] = new Swiper(sliderThumbsSelector, sliderThumbOptions[i]); advSliderOptions[i].thumbs = {}; advSliderOptions[i].thumbs.swiper = advSliderThumbs[i]; advSliderOptions[i].noSwipingSelector = '.l-slider-nav, .m-slider__pagination'; /* if(slider.classList.contains('js-before-after')) { jQuery('.js-before-after-thumb').on('click', function(e) { e.stopPropagation(); const allSlides = [...document.querySelectorAll('.js-before-after-thumb')]; const current = jQuery(this).get(0); advSliderThumbs[i].slideTo(allSlides.indexOf(current)); }); beforeAfterThumbSlider = advSliderThumbs[i]; } */ } advSliders[i] = new Swiper(slider, advSliderOptions[i]); /*if(slider.classList.contains('js-before-after')) { advSliders[i].on('slideChange', function (swp) { if(beforeAfterThumbSlider) { beforeAfterThumbSlider.slideTo(swp.realIndex); } }); }*/ if (sliderNav) { if (advSliders[i].initialized) { advSliderNav[i] = new _library_sliders_swiper_with_tabs__WEBPACK_IMPORTED_MODULE_0__["default"](advSliders[i], sliderTabOptions[i]); var containerElement = advSliders[i].el; var underline = containerElement.querySelector('.js-slider-nav-underline'); if (underline) { advSliderNav[i].swiper.on('slideChange', function () { underline.style.transform = 'translate3d(' + advSliderNav[i].swiper.activeIndex * 100 + '%,0,0)'; }); } } } }); }; /***/ }), /***/ "./function-calls/sliders/slider-ba.js": /*!*********************************************!*\ !*** ./function-calls/sliders/slider-ba.js ***! \*********************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ baSlider: function() { return /* binding */ baSlider; } /* harmony export */ }); /* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery"); /** * Before/after SLIDER type */ var baSlider = function baSlider() { var baSliderEl = $('.js-before-after'); if (baSliderEl) { var handleBaSliderIntersection = function handleBaSliderIntersection(entries, observer) { entries.forEach(function (entry) { if (entry.isIntersecting) { var baSliderElCount = document.querySelectorAll(".s-before-after .c-slider-nav__thumb").length; var startSlide = Math.round(baSliderElCount / 2 - 1); var baThumbs = new Swiper('.ba-thumbs', { spaceBetween: 10, slidesPerView: 3, freeMode: true, watchSlidesProgress: true, centeredSlides: true, slideToClickedSlide: true, allowTouchMove: true, threshold: 30, breakpoints: { 768: { slidesPerView: 5, spaceBetween: 10, freeMode: true, watchSlidesProgress: true, centeredSlides: false, slideToClickedSlide: true, allowTouchMove: false, threshold: 30 } } }); var _baSlider = new Swiper('.ba-slider', { autoHeight: true, autoplay: false, navigation: { nextEl: '.ba-slider-next', prevEl: '.ba-slider-prev' }, thumbs: { swiper: baThumbs } // on: { // slideChange: function () { // // let currentIndex = baSlider.activeIndex; // // let currentSlide = $(".js-process-thumbs .swiper-slide")[currentIndex]; // // let slide = currentSlide.querySelector('.l-testimonials'); // // console.log($(currentSlide).height() ); // // // $('.ba-slider.swiper-container').height($(currentSlide).height() ) // baSlider.updateAutoHeight(2000) // }, // }, }); // baSlider.controller.control = baThumbs; // baThumbs.controller.control = baSlider; setTimeout(function () { _baSlider.slideTo(startSlide); }, 1000); var csThumbs = new Swiper('.cs-thumbs', { spaceBetween: 10, slidesPerView: 3, freeMode: true, watchSlidesProgress: true, centeredSlides: true, slideToClickedSlide: true, breakpoints: { 768: { slidesPerView: 5, spaceBetween: 10, freeMode: true, watchSlidesProgress: true, centeredSlides: false, slideToClickedSlide: true } } }); var csSlider = new Swiper('.cs-slider', { navigation: { nextEl: '.cs-slider-next', prevEl: '.cs-slider-prev' }, thumbs: { swiper: csThumbs } }); observer.unobserve(entry.target); } }); }; // Create an intersection observer instance var observer = new IntersectionObserver(handleBaSliderIntersection, { threshold: 0 }); // Select all buttons to observe baSliderEl.each(function () { observer.observe(this); // Start observing each slider }); // csSlider.controller.control = csThumbs; // csThumbs.controller.control = csSlider; } var processSlider = $('.s-our-process'); if (processSlider) { var handlePrSliderIntersection = function handlePrSliderIntersection(entries, observer) { entries.forEach(function (entry) { if (entry.isIntersecting) { var prThumbs = new Swiper('.js-process-thumbs ', { slidesPerView: 1, spaceBetween: 10, // centeredSlides: true, // loop: true, threshold: 20, slideToClickedSlide: true, // initialSlide: startSlide, allowTouchMove: false, navigation: { nextEl: '.pr-next', prevEl: '.pr-prev' }, breakpoints: { 768: { slidesPerView: "auto", allowTouchMove: true, threshold: 100 // centeredSlides: true, } } }); prThumbs.on('slideChange', function () {}); var prSlider = new Swiper('.js-process-slides', { slidesPerView: 1, // centeredSlides: true, // loop: true, // loopedSlides: baSliderElCount, // initialSlide: startSlide, autoHeight: true, navigation: { nextEl: '.pr-next', prevEl: '.pr-prev' }, thumbs: { swiper: prThumbs }, on: { slideChange: function slideChange() { var jumper = document.querySelector(".jumper"); var currentSlide = prSlider.activeIndex; var thumbSlide = $(".js-process-thumbs .swiper-slide")[currentSlide]; var offsetLeft = thumbSlide.offsetLeft; var aiWidth = thumbSlide.offsetWidth; jumper.style.left = "".concat(offsetLeft + aiWidth / 2 - 45, "px"); jumper.classList.add("yoohoo"); setTimeout(function () { jumper.classList.remove("yoohoo"); }, 450); } } }); var navParents = document.querySelectorAll(".nav-jumper"); navParents.forEach(function (navParent, index) { var jumper = navParent.querySelector(".jumper"); var items = navParent.querySelectorAll(".l-slider-nav .swiper-slide"); var activeItem = navParent.querySelector(".l-slider-nav .swiper-slide-thumb-active"); var offsetLeft = activeItem.offsetLeft; var aiWidth = activeItem.offsetWidth; jumper.style.left = "".concat(offsetLeft + aiWidth / 2 - 45, "px"); }); observer.unobserve(entry.target); } }); }; // Create an intersection observer instance var observer = new IntersectionObserver(handlePrSliderIntersection, { threshold: 0 }); // Select all buttons to observe processSlider.each(function () { observer.observe(this); // Start observing each slider }); } $(".js-tabs-nav-item").click(function () { $(".gridder-show").remove(); }); }; /***/ }), /***/ "./function-calls/sliders/slider-dsbls.js": /*!************************************************!*\ !*** ./function-calls/sliders/slider-dsbls.js ***! \************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ dsblsSlider: function() { return /* binding */ dsblsSlider; } /* harmony export */ }); /* harmony import */ var _library_sliders_slider_dsbls__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../library/sliders/slider-dsbls */ "./library/sliders/slider-dsbls.js"); /** * DSBLS SLIDER type */ // config selectors only here var dsblsSel = '.js-slider-dsbls'; var dsblsSelMob = '.js-slider-dsbls-m'; // find those selectors var dsblsSliderList = document.querySelectorAll(dsblsSel); var dsblsSliderMobileList = document.querySelectorAll(dsblsSelMob); var dsblsSlider = function dsblsSlider() { // loop through sliders and add ID's to it, we assume each dsbls slider has its own mobile slider as it // component, so no need to loop, search parent and query child element var dsbls = []; dsblsSliderList.forEach(function (slider, i) { var sliderID = 'js-slider-dsbls-' + i; var sliderMobileID = 'js-slider-dsbls-m-' + i; slider.setAttribute('id', sliderID); dsblsSliderMobileList[i].setAttribute('id', sliderMobileID); dsbls[i] = new _library_sliders_slider_dsbls__WEBPACK_IMPORTED_MODULE_0__["default"](sliderID); }); }; /***/ }), /***/ "./function-calls/sliders/slider-simple.js": /*!*************************************************!*\ !*** ./function-calls/sliders/slider-simple.js ***! \*************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ simpleSliders: function() { return /* binding */ simpleSliders; } /* harmony export */ }); /* harmony import */ var _library_sliders_slider_options_autoplay__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../library/sliders/slider-options/autoplay */ "./library/sliders/slider-options/autoplay.js"); /* harmony import */ var _library_sliders_slider_options_lazy__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../library/sliders/slider-options/lazy */ "./library/sliders/slider-options/lazy.js"); /* harmony import */ var _library_sliders_slider_options_breakpoints__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../library/sliders/slider-options/breakpoints */ "./library/sliders/slider-options/breakpoints.js"); /* harmony import */ var _library_sliders_slider_options_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../library/sliders/slider-options/navigation */ "./library/sliders/slider-options/navigation.js"); /** * Simple slider type */ // config selectors only here var simpleName = 'js-slider-simple'; var simpleSliderSel = '.js-slider-simple'; // find those selectors var simpleSliderList = document.querySelectorAll(simpleSliderSel); var simpleSliders = function simpleSliders() { // loop through sliders and add ID's to it var simpleSliderOptions = []; var simpleSliders = []; var currentWidth = window.innerWidth; simpleSliderList.forEach(function (slider, i) { simpleSliderOptions[i] = { pagination: { el: '.m-slider__pagination', clickable: true } }; var sliderID = "".concat(simpleName, "-").concat(i); slider.setAttribute('id', sliderID); simpleSliderOptions[i] = (0,_library_sliders_slider_options_autoplay__WEBPACK_IMPORTED_MODULE_0__.isAutoPlayOn)(slider, simpleSliderOptions[i]); simpleSliderOptions[i] = (0,_library_sliders_slider_options_lazy__WEBPACK_IMPORTED_MODULE_1__.isLazyLoadOn)(slider, simpleSliderOptions[i]); simpleSliderOptions[i] = (0,_library_sliders_slider_options_breakpoints__WEBPACK_IMPORTED_MODULE_2__.isBreakpointsOn)(slider, simpleSliderOptions[i]); // .m-slider parent is hardcoded in isNavigationOn options simpleSliderOptions[i] = (0,_library_sliders_slider_options_navigation__WEBPACK_IMPORTED_MODULE_3__.isNavigationOn)(slider, simpleSliderOptions[i], simpleName, i); var noMobile = slider.getAttribute('data-no-mobile'); simpleSliders[i] = new Swiper(slider, simpleSliderOptions[i]); if (noMobile) { currentWidth < 768 ? simpleSliders[i].destroy() : ''; } }); }; /***/ }), /***/ "./function-calls/sliders/slider-vertical.js": /*!***************************************************!*\ !*** ./function-calls/sliders/slider-vertical.js ***! \***************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ vSlider: function() { return /* binding */ vSlider; } /* harmony export */ }); /** * Swiper slider with thumbs for testimonials module */ var vSlider = function vSlider() { var vSliderEl = document.querySelector('.js-slider-vertical'); if (vSliderEl) { var vSliderElCount = document.querySelectorAll(".js-slider-vertical .gallery-top .swiper-slide").length; var sliderTop = new Swiper(".gallery-top", { spaceBetween: 0, effect: "slide", direction: "vertical", centeredSlides: true, initialSlide: 1, breakpoints: { 300: { slidesPerView: 1 }, 1100: { slidesPerView: 1 }, 1650: { slidesPerView: 1 } }, // autoplay: { // delay: 2000, // reverseDirection: true, // pauseOnMouseEnter: true, // }, speed: 1000, loop: true, loopedSlides: vSliderElCount, loopAdditionalSlides: 2, slideToClickedSlide: true }); var sliderBottom = new Swiper(".gallery-bottom", { initialSlide: 1, centeredSlides: true, direction: "vertical", loop: true, loopedSlides: vSliderElCount, loopAdditionalSlides: 2, navigation: { nextEl: ".swiper-button-next", prevEl: ".swiper-button-prev" } }); sliderTop.controller.control = sliderBottom; sliderBottom.controller.control = sliderTop; // sliderTop.on("slideChange", function () { // sliderBottom.slideTo(sliderTop.activeIndex); // }); // sliderBottom.on("slideChange", function () { // sliderTop.slideTo(sliderBottom.activeIndex); // }); } }; /***/ }), /***/ "./function-calls/tabs-to-accordion-mobile.js": /*!****************************************************!*\ !*** ./function-calls/tabs-to-accordion-mobile.js ***! \****************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ callTabAccordionsMobile: function() { return /* binding */ callTabAccordionsMobile; } /* harmony export */ }); /* harmony import */ var _library_tabs_accordions_DSMPTabsToAccordionMobile__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../library/tabs-accordions/DSMPTabsToAccordionMobile */ "./library/tabs-accordions/DSMPTabsToAccordionMobile.js"); var tabaccID = 'js-tab-acc'; var tabaccSelector = '.js-tabs-to-acc-wrapper'; var tabaccItems = document.querySelectorAll(tabaccSelector); var callTabAccordionsMobile = function callTabAccordionsMobile() { tabaccItems.forEach(function (acc, i) { var taID = "".concat(tabaccID, "-").concat(i); var callID = "#".concat(taID); acc.setAttribute('id', taID); new _library_tabs_accordions_DSMPTabsToAccordionMobile__WEBPACK_IMPORTED_MODULE_0__["default"](callID); }); }; /***/ }), /***/ "./function-calls/tinymce-read-more/read-more.js": /*!*******************************************************!*\ !*** ./function-calls/tinymce-read-more/read-more.js ***! \*******************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": function() { return /* binding */ readMore; } /* harmony export */ }); /* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery"); /* eslint-disable linebreak-style */ /* eslint-disable no-undef */ function readMore() { var readMoreWrappers = document.querySelectorAll('.read-more-wrapper'); // console.log(readMoreWrappers) readMoreWrappers.forEach(function (readMoreWrapper) { var readMoreBtn = readMoreWrapper.querySelector('.js-read-more-toggle'); var readMoreBtnClick = readMoreWrapper.querySelector('.js-read-more-toggle-click'); // const btnTextNoActive = readMoreBtn.getAttribute('data-show-less-text'); // const btnTextActive = readMoreBtn.children[0].textContent; var readMoreText = readMoreWrapper.querySelector('.read-more-text'); var isActive = readMoreWrapper.classList.contains('is-active'); var readMoreTextHeight = readMoreText ? readMoreText.scrollHeight : 0; if (readMoreWrapper.classList.contains('is-active')) { readMoreText.style.maxHeight = "".concat(readMoreTextHeight, "px"); } function showText() { if (readMoreText) { $('.read-more-wrapper').removeClass('is-active'); $('.read-more-text').css({ "maxHeight": "0" }); readMoreWrapper.classList.add('is-active'); // readMoreBtn.children[0].textContent = btnTextNoActive; readMoreText.style.maxHeight = "".concat(readMoreTextHeight, "px"); } } function hideText() { if (readMoreText) { readMoreWrapper.classList.remove('is-active'); // readMoreBtn.children[0].textContent = btnTextActive; readMoreText.style.maxHeight = 0; } } function toggle() { if (readMoreWrapper.classList.contains('is-active')) { readMoreText.style.maxHeight = 0; readMoreWrapper.classList.remove('is-active'); } else { readMoreWrapper.classList.add('is-active'); readMoreText.style.maxHeight = "".concat(readMoreTextHeight, "px"); } } if (readMoreBtn) { readMoreBtn.addEventListener('mouseenter', showText); } else { readMoreBtnClick.addEventListener('click', toggle); } // readMoreBtn.addEventListener("mouseleave", hideText); }); // $('.rm-ini-drop-js').each(function(){ // $(this).mouseenter(function(){ // var moreTxtH = $(this).find(".read-more-text").outerHeight(); // var drop = $(this).find(".read-more-drop"); // $('.rm-ini-drop-js').removeClass('is-active'); // $(this).addClass('is-active'); // $('.read-more-drop').removeClass('is-active').height(0); // drop.height(moreTxtH).addClass('is-active'); // }) // }); } ; /***/ }), /***/ "./header/mobile-nav.js": /*!******************************!*\ !*** ./header/mobile-nav.js ***! \******************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ mobileNav: function() { return /* binding */ mobileNav; } /* harmony export */ }); /** * Toggle mobile nav * @param {string} el - selector for adding an active class */ function mobileNav(el, subEl) { var btns = document.querySelectorAll(el); var body = document.querySelector('body'); var subMenus = document.querySelectorAll('.js-dropdown-menu-holder'); var newWidth = window.innerWidth; // main menu toggle btns.forEach(function (btn) { btn.addEventListener('click', function (event) { event.preventDefault(); if (newWidth < 1025) { subMenus.forEach(function (subMenu) { subMenu.querySelector('.sub-menu').style.display = "block"; }); } if (btn.getAttribute('aria-expanded') === 'false') { btn.classList.add('is-active'); body.classList.add('nav-active'); btn.setAttribute('aria-expanded', 'true'); shiftFocus('#menu-header a'); keepFocusInsideDiv(); closeMenuEsc(); } else { btn.classList.remove('is-active'); body.classList.remove('nav-active'); btn.setAttribute('aria-expanded', 'false'); shiftFocus('.js-toggleNav'); } }); }); // submenu toggle var menuItems = document.querySelectorAll('.js-menu-dropdown-toggle'); menuItems.forEach(function (item) { item.addEventListener('click', function () { // Close all other menus menuItems.forEach(function (otherItem) { if (otherItem !== item) { var otherMenu = otherItem.querySelector('.js-dropdown-menu-holder'); if (otherMenu) { otherMenu.style.height = '0'; otherMenu.classList.remove('nav-active'); otherItem.classList.remove('nav-active'); } } }); // Toggle the clicked menu var menu = item.querySelector('.js-dropdown-menu-holder'); if (menu) { var subMenu = menu.querySelector('.sub-menu'); var height = subMenu ? subMenu.offsetHeight : 0; // Toggle height and active class var isActive = menu.classList.contains('nav-active'); menu.style.height = isActive ? '0' : "".concat(height, "px"); menu.classList.toggle('nav-active'); item.classList.toggle('nav-active'); } }); }); } function shiftFocus(selector) { var element = document.querySelector(selector); if (element) { element.focus(); } } function keepFocusInsideDiv() { document.addEventListener('keydown', function (e) { var focusableElements = document.querySelectorAll('.nav-main__wrap a, .nav-main__wrap button, .nav-main__wrap input, .nav-main__wrap select, .nav-main__wrap textarea, .nav-main__wrap [tabindex]:not([tabindex="-1"])'); focusableElements = Array.prototype.slice.call(focusableElements); var firstElement = focusableElements[0]; var lastElement = focusableElements[focusableElements.length - 1]; if (e.key === 'Tab') { if (e.shiftKey) /* Shift + Tab */{ if (document.activeElement === firstElement) { e.preventDefault(); lastElement.focus(); } } else /* Tab */{ if (document.activeElement === lastElement) { e.preventDefault(); firstElement.focus(); } } } }); } function closeMenuEsc() { document.addEventListener('keydown', function (event) { if (event.key === "Escape" || event.key === "Esc") { var body = document.body; if (body.classList.contains('nav-active')) { body.classList.remove('nav-active'); document.querySelector('.js-toggleNav').classList.remove('is-active'); document.querySelector('.js-toggleNav').setAttribute('aria-expanded', 'false'); shiftFocus('.js-toggleNav'); } } }); } /***/ }), /***/ "./header/sticky-header.js": /*!*********************************!*\ !*** ./header/sticky-header.js ***! \*********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ stickyHeader: function() { return /* binding */ stickyHeader; } /* harmony export */ }); /* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/utils */ "./utils/utils.js"); /** * Add class on scroll for sticky header * @param {string} el - selector for adding an active class * @param {string} elClass - active class */ function stickyHeader(el, elClass) { var $$header = document.querySelector(el); var elHeight = 10; var offset = parseInt(elHeight / 5); var onScroll = function onScroll() { if (window.pageYOffset > elHeight + offset) { $$header.classList.add(elClass); } else if (window.pageYOffset < elHeight - offset) { $$header.classList.remove(elClass); } }; var throttleScroll = (0,_utils_utils__WEBPACK_IMPORTED_MODULE_0__.u_throttled)(function () { onScroll(); }, 30); window.addEventListener('scroll', function () { throttleScroll(); }); if (window.pageYOffset > elHeight + offset) { $$header.classList.add(elClass); } } /***/ }), /***/ "./header/toggle-submenu.js": /*!**********************************!*\ !*** ./header/toggle-submenu.js ***! \**********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ toggleSubmenu: function() { return /* binding */ toggleSubmenu; } /* harmony export */ }); /* harmony import */ var _utils_u_slide_up_down__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/u_slide-up-down */ "./utils/u_slide-up-down.js"); var toggleSubmenu = function toggleSubmenu() { var selector = document.querySelector('.footer-nav'); var items; if (selector) { items = selector.querySelectorAll('.footer-nav .menu-item-has-children'); } if (items) { items.forEach(function (btn, i) { var submenu = btn.querySelector('.sub-menu'); btn.setAttribute('aria-expanded', 'false'); (0,_utils_u_slide_up_down__WEBPACK_IMPORTED_MODULE_0__.u_slideUp)(submenu); btn.firstElementChild.addEventListener('click', function (ev) { ev.preventDefault(); if (ev.target.tagName.toLowerCase() === 'a') { //return; } if (btn.classList.contains('is-toggled')) { (0,_utils_u_slide_up_down__WEBPACK_IMPORTED_MODULE_0__.u_slideUp)(submenu); btn.classList.remove('is-toggled'); btn.setAttribute('aria-expanded', 'false'); } else { items.forEach(function (item, j) { var submenu = item.querySelector('.sub-menu'); if (item.classList.contains('is-toggled')) { (0,_utils_u_slide_up_down__WEBPACK_IMPORTED_MODULE_0__.u_slideUp)(submenu); item.classList.remove('is-toggled'); item.setAttribute('aria-expanded', 'false'); } }); btn.classList.add('is-toggled'); btn.setAttribute('aria-expanded', 'true'); (0,_utils_u_slide_up_down__WEBPACK_IMPORTED_MODULE_0__.u_slideDown)(submenu); } }); }); } }; /***/ }), /***/ "./index.js": /*!******************!*\ !*** ./index.js ***! \******************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ funk: function() { return /* binding */ funk; } /* harmony export */ }); /* harmony import */ var _header_sticky_header__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./header/sticky-header */ "./header/sticky-header.js"); /* harmony import */ var _header_mobile_nav__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./header/mobile-nav */ "./header/mobile-nav.js"); /* harmony import */ var _header_toggle_submenu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./header/toggle-submenu */ "./header/toggle-submenu.js"); /* harmony import */ var _function_calls_sliders__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./function-calls/sliders */ "./function-calls/sliders.js"); /* harmony import */ var _function_calls_accordions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./function-calls/accordions */ "./function-calls/accordions.js"); /* harmony import */ var _function_calls_tabs_to_accordion_mobile__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./function-calls/tabs-to-accordion-mobile */ "./function-calls/tabs-to-accordion-mobile.js"); /* harmony import */ var _components_hero_player__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/hero-player */ "./components/hero-player.js"); /* harmony import */ var _components_box_cta_widget_cookie__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/box-cta-widget-cookie */ "./components/box-cta-widget-cookie.js"); /* harmony import */ var _components_read_more__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./components/read-more */ "./components/read-more.js"); /* harmony import */ var _function_calls_tinymce_read_more_read_more__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./function-calls/tinymce-read-more/read-more */ "./function-calls/tinymce-read-more/read-more.js"); /* harmony import */ var _components_load_more_projects__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./components/load-more-projects */ "./components/load-more-projects.js"); /* harmony import */ var _load_more_load_more_posts__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./load-more/load-more-posts */ "./load-more/load-more-posts.js"); /* harmony import */ var _components_case_studies__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./components/case-studies */ "./components/case-studies.js"); /* harmony import */ var _components_site_search__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./components/site-search */ "./components/site-search.js"); /* harmony import */ var _components_back_to_top__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./components/back-to-top */ "./components/back-to-top.js"); /* harmony import */ var _components_progress_bar__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./components/progress-bar */ "./components/progress-bar.js"); /* harmony import */ var _components_toggle_element__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./components/toggle-element */ "./components/toggle-element.js"); /* harmony import */ var _components_tabs_underline__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./components/tabs-underline */ "./components/tabs-underline.js"); /* harmony import */ var _components_case_study_tabs__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./components/case-study-tabs */ "./components/case-study-tabs.js"); /* harmony import */ var _components_ba_collapser__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./components/ba-collapser */ "./components/ba-collapser.js"); /* harmony import */ var _components_expand_image__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./components/expand-image */ "./components/expand-image.js"); /* harmony import */ var _components_footer_hover__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./components/footer-hover */ "./components/footer-hover.js"); /* harmony import */ var _components_auto_tabs__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./components/auto-tabs */ "./components/auto-tabs.js"); /* harmony import */ var _components_location_accordion__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./components/location-accordion */ "./components/location-accordion.js"); /* harmony import */ var _components_g_forms__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./components/g-forms */ "./components/g-forms.js"); /* harmony import */ var _components_foot_accordion__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./components/foot-accordion */ "./components/foot-accordion.js"); /* harmony import */ var _components_ba_single__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./components/ba-single */ "./components/ba-single.js"); /* harmony import */ var _components_fake_menu__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./components/fake-menu */ "./components/fake-menu.js"); /* harmony import */ var _components_load_more_solutions__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./components/load-more-solutions */ "./components/load-more-solutions.js"); /* harmony import */ var _components_conv_calc__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./components/conv-calc */ "./components/conv-calc.js"); /* harmony import */ var _components_calculator_widget_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./components/calculator-widget.js */ "./components/calculator-widget.js"); /* harmony import */ var _components_calculator__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./components/calculator */ "./components/calculator.js"); /* harmony import */ var _components_logo_slider__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./components/logo-slider */ "./components/logo-slider.js"); /* harmony import */ var _components_sticky_whitepaper__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./components/sticky-whitepaper */ "./components/sticky-whitepaper.js"); /* harmony import */ var _components_pause_hero_anim__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./components/pause-hero-anim */ "./components/pause-hero-anim.js"); /* harmony import */ var _components_menu_hover_effect__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./components/menu-hover-effect */ "./components/menu-hover-effect.js"); /* harmony import */ var _components_scroller__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./components/scroller */ "./components/scroller.js"); /* harmony import */ var _utils_u_is_touch_device__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./utils/u_is-touch-device */ "./utils/u_is-touch-device.js"); /* harmony import */ var _library_tabs_accordions_tab_accordion__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./library/tabs-accordions/tab-accordion */ "./library/tabs-accordions/tab-accordion.js"); /* harmony import */ var _library_tabs_accordions_tab_single__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./library/tabs-accordions/tab-single */ "./library/tabs-accordions/tab-single.js"); /* harmony import */ var _library_tabs_accordions_DSMPTabs_tab__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./library/tabs-accordions/DSMPTabs-tab */ "./library/tabs-accordions/DSMPTabs-tab.js"); /* harmony import */ var _library_tabs_accordions_DSMPTabs_dropdown__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./library/tabs-accordions/DSMPTabs-dropdown */ "./library/tabs-accordions/DSMPTabs-dropdown.js"); /* harmony import */ var _library_tabs_accordions_DSMPTabs_tabdropdown__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./library/tabs-accordions/DSMPTabs-tabdropdown */ "./library/tabs-accordions/DSMPTabs-tabdropdown.js"); /* harmony import */ var _library_media_controls_media_control__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./library/media-controls/media-control */ "./library/media-controls/media-control.js"); /* harmony import */ var _library_counters_purecounter__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./library/counters/purecounter */ "./library/counters/purecounter.js"); /* harmony import */ var _library_collapsers_gridder_init__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./library/collapsers/gridder-init */ "./library/collapsers/gridder-init.js"); /* harmony import */ var _function_calls_box_cta_position__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./function-calls/box-cta-position */ "./function-calls/box-cta-position.js"); /* harmony import */ var _visuals_scroll_animations__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./visuals/scroll-animations */ "./visuals/scroll-animations.js"); /* harmony import */ var _visuals_video_hover__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./visuals/video-hover */ "./visuals/video-hover.js"); /* harmony import */ var _patches_tabsTabDrop_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./patches/tabsTabDrop.js */ "./patches/tabsTabDrop.js"); /* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery"); /* provided dependency */ var jQuery = __webpack_require__(/*! jquery */ "jquery"); /* eslint-disable linebreak-style */ /* eslint-disable no-new */ /* eslint-disable no-undef */ /* * @title Main App * @description Application entry point */ // Header // import { searchOverlay } from './header/search-overlay'; // function calls // components // import openCaseStudy from './components/open-case-study'; // import whitepaperPopup from './components/whitepaper-form'; // import PopupsForms from './components/popups-form'; // import { raqPopup } from './components/popup-raq'; // import { navJumper } from './components/nav-jumper'; // import { tabsToSlider } from './components/tabs-to-slider'; // utils // import { heroHomeScroll } from "./library/animations/hero-home-scroll"; // eslint-disable-next-line camelcase // libraries // Function calls // Effects // eslint-disable-next-line import/prefer-default-export function funk() { return dsAjax; } document.addEventListener('DOMContentLoaded', function () { // check whether it is touch device or not (0,_utils_u_is_touch_device__WEBPACK_IMPORTED_MODULE_37__.u_addTouchToHtml)(); //Reposition box cta if the is TOC (0,_function_calls_box_cta_position__WEBPACK_IMPORTED_MODULE_46__.boxCtaPosition)(); // Header (0,_header_sticky_header__WEBPACK_IMPORTED_MODULE_0__.stickyHeader)('.site-header', 'is-sticky'); // searchOverlay(); (0,_header_mobile_nav__WEBPACK_IMPORTED_MODULE_1__.mobileNav)('.js-toggleNav', '.js-menu-dropdown-toggle'); if (window.matchMedia('(max-width: 1024px)').matches) { (0,_header_toggle_submenu__WEBPACK_IMPORTED_MODULE_2__.toggleSubmenu)(); } new _library_counters_purecounter__WEBPACK_IMPORTED_MODULE_44__["default"]({ selector: '.js-counter-number' }); new _library_tabs_accordions_tab_accordion__WEBPACK_IMPORTED_MODULE_38__["default"](); (0,_library_collapsers_gridder_init__WEBPACK_IMPORTED_MODULE_45__["default"])(); new _library_media_controls_media_control__WEBPACK_IMPORTED_MODULE_43__["default"](); (0,_function_calls_sliders__WEBPACK_IMPORTED_MODULE_3__.callSliders)(); (0,_function_calls_accordions__WEBPACK_IMPORTED_MODULE_4__.callAccordions)(); // callAccordionsLight(); (0,_load_more_load_more_posts__WEBPACK_IMPORTED_MODULE_11__.loadMorePosts)(); // components (0,_components_hero_player__WEBPACK_IMPORTED_MODULE_6__["default"])('.videoPlayer'); // openCaseStudy(); // whitepaperPopup(); (0,_components_read_more__WEBPACK_IMPORTED_MODULE_8__["default"])(); (0,_function_calls_tinymce_read_more_read_more__WEBPACK_IMPORTED_MODULE_9__["default"])(); (0,_components_load_more_projects__WEBPACK_IMPORTED_MODULE_10__.loadMoreProjects)(dsAjax); (0,_components_case_studies__WEBPACK_IMPORTED_MODULE_12__["default"])(dsAjax); (0,_components_site_search__WEBPACK_IMPORTED_MODULE_13__.toggleSearch)('.js-searchToggle'); // PopupsForms(); (0,_components_back_to_top__WEBPACK_IMPORTED_MODULE_14__.backToTop)('backToTop'); (0,_components_progress_bar__WEBPACK_IMPORTED_MODULE_15__.progressBarScroll)(); (0,_components_toggle_element__WEBPACK_IMPORTED_MODULE_16__.toggleElement)('js-toggleElement', 'js-toggleTrigger'); (0,_components_tabs_underline__WEBPACK_IMPORTED_MODULE_17__.tabsUnderline)(); (0,_components_case_study_tabs__WEBPACK_IMPORTED_MODULE_18__["default"])(); (0,_components_ba_collapser__WEBPACK_IMPORTED_MODULE_19__.baCollapser)('.js-view-more', '.s-before-after'); (0,_components_expand_image__WEBPACK_IMPORTED_MODULE_20__.expandImage)(); // raqPopup(); (0,_components_auto_tabs__WEBPACK_IMPORTED_MODULE_22__.autoTabs)(); (0,_components_location_accordion__WEBPACK_IMPORTED_MODULE_23__.locationAccordion)(); (0,_components_g_forms__WEBPACK_IMPORTED_MODULE_24__.gForms)(); (0,_components_foot_accordion__WEBPACK_IMPORTED_MODULE_25__.footAccordion)(); // navJumper(); (0,_components_fake_menu__WEBPACK_IMPORTED_MODULE_27__.fakeFooterMenu)(); (0,_components_load_more_solutions__WEBPACK_IMPORTED_MODULE_28__["default"])(); (0,_components_conv_calc__WEBPACK_IMPORTED_MODULE_29__["default"])(); (0,_components_ba_single__WEBPACK_IMPORTED_MODULE_26__.expandBAImage)(); (0,_components_calculator_widget_js__WEBPACK_IMPORTED_MODULE_30__.priceCalculatorWidget)(); (0,_components_calculator__WEBPACK_IMPORTED_MODULE_31__.priceCalculator)(); (0,_components_sticky_whitepaper__WEBPACK_IMPORTED_MODULE_33__.stickyPopUp)(); (0,_components_pause_hero_anim__WEBPACK_IMPORTED_MODULE_34__.pauseHeroAnimations)(); (0,_components_menu_hover_effect__WEBPACK_IMPORTED_MODULE_35__.menuHover)(); if ($("body").hasClass("home")) { // heroHomeScroll(); } (0,_components_logo_slider__WEBPACK_IMPORTED_MODULE_32__.logoSlider)(); new _library_tabs_accordions_tab_single__WEBPACK_IMPORTED_MODULE_39__["default"](); new _library_tabs_accordions_DSMPTabs_tab__WEBPACK_IMPORTED_MODULE_40__["default"](); new _library_tabs_accordions_DSMPTabs_dropdown__WEBPACK_IMPORTED_MODULE_41__["default"](); new _library_tabs_accordions_DSMPTabs_tabdropdown__WEBPACK_IMPORTED_MODULE_42__["default"](); (0,_function_calls_tabs_to_accordion_mobile__WEBPACK_IMPORTED_MODULE_5__.callTabAccordionsMobile)(); (0,_visuals_scroll_animations__WEBPACK_IMPORTED_MODULE_47__.scrollAnimations)(); (0,_components_scroller__WEBPACK_IMPORTED_MODULE_36__.scroller24)(); // Initialize the class on DOM content load new _components_box_cta_widget_cookie__WEBPACK_IMPORTED_MODULE_7__["default"](); if (window.matchMedia("(min-width: 1025px)").matches) { (0,_visuals_video_hover__WEBPACK_IMPORTED_MODULE_48__.videoHover)(); (0,_components_footer_hover__WEBPACK_IMPORTED_MODULE_21__.footerHover)(); } }); $(window).on("resize", function () { (0,_components_foot_accordion__WEBPACK_IMPORTED_MODULE_25__.footAccordion)(); }); // Vendors libs var myLazyLoad = new LazyLoad({ elements_selector: '.lazy' }); window.myLazyLoad = myLazyLoad; /** Fix jQuery passive listeners */ jQuery.event.special.touchstart = { setup: function setup(_, ns, handle) { this.addEventListener('touchstart', handle, { passive: !ns.includes('noPreventDefault') }); } }; jQuery.event.special.touchmove = { setup: function setup(_, ns, handle) { this.addEventListener('touchmove', handle, { passive: !ns.includes('noPreventDefault') }); } }; jQuery.event.special.wheel = { setup: function setup(_, ns, handle) { this.addEventListener('wheel', handle, { passive: true }); } }; jQuery.event.special.mousewheel = { setup: function setup(_, ns, handle) { this.addEventListener('mousewheel', handle, { passive: true }); } }; // Accessibility Patches (0,_patches_tabsTabDrop_js__WEBPACK_IMPORTED_MODULE_49__.tabsTabDrop)(); /***/ }), /***/ "./library/animations/easings-es6.js": /*!*******************************************!*\ !*** ./library/animations/easings-es6.js ***! \*******************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ easeInBack: function() { return /* binding */ easeInBack; }, /* harmony export */ easeInBounce: function() { return /* binding */ easeInBounce; }, /* harmony export */ easeInCirc: function() { return /* binding */ easeInCirc; }, /* harmony export */ easeInCubic: function() { return /* binding */ easeInCubic; }, /* harmony export */ easeInElastic: function() { return /* binding */ easeInElastic; }, /* harmony export */ easeInExpo: function() { return /* binding */ easeInExpo; }, /* harmony export */ easeInOutBack: function() { return /* binding */ easeInOutBack; }, /* harmony export */ easeInOutBounce: function() { return /* binding */ easeInOutBounce; }, /* harmony export */ easeInOutCirc: function() { return /* binding */ easeInOutCirc; }, /* harmony export */ easeInOutCubic: function() { return /* binding */ easeInOutCubic; }, /* harmony export */ easeInOutElastic: function() { return /* binding */ easeInOutElastic; }, /* harmony export */ easeInOutExpo: function() { return /* binding */ easeInOutExpo; }, /* harmony export */ easeInOutQuad: function() { return /* binding */ easeInOutQuad; }, /* harmony export */ easeInOutQuart: function() { return /* binding */ easeInOutQuart; }, /* harmony export */ easeInOutQuint: function() { return /* binding */ easeInOutQuint; }, /* harmony export */ easeInOutSine: function() { return /* binding */ easeInOutSine; }, /* harmony export */ easeInQuad: function() { return /* binding */ easeInQuad; }, /* harmony export */ easeInQuart: function() { return /* binding */ easeInQuart; }, /* harmony export */ easeInQuint: function() { return /* binding */ easeInQuint; }, /* harmony export */ easeInSine: function() { return /* binding */ easeInSine; }, /* harmony export */ easeOutBack: function() { return /* binding */ easeOutBack; }, /* harmony export */ easeOutBounce: function() { return /* binding */ easeOutBounce; }, /* harmony export */ easeOutCirc: function() { return /* binding */ easeOutCirc; }, /* harmony export */ easeOutCubic: function() { return /* binding */ easeOutCubic; }, /* harmony export */ easeOutElastic: function() { return /* binding */ easeOutElastic; }, /* harmony export */ easeOutExpo: function() { return /* binding */ easeOutExpo; }, /* harmony export */ easeOutQuad: function() { return /* binding */ easeOutQuad; }, /* harmony export */ easeOutQuart: function() { return /* binding */ easeOutQuart; }, /* harmony export */ easeOutQuint: function() { return /* binding */ easeOutQuint; }, /* harmony export */ easeOutSine: function() { return /* binding */ easeOutSine; } /* harmony export */ }); /** * https://github.com/janrembold/es6-easings * * usage : import {easeInOutQuad} from 'easings'; */ var easeOutQuad = function easeOutQuad(t, b, c, d) { return -c * (t /= d) * (t - 2) + b; }; var easeInQuad = function easeInQuad(t, b, c, d) { return c * (t /= d) * t + b; }; var easeInOutQuad = function easeInOutQuad(t, b, c, d) { if ((t /= d / 2) < 1) return c / 2 * t * t + b; return -c / 2 * (--t * (t - 2) - 1) + b; }; var easeInCubic = function easeInCubic(t, b, c, d) { return c * (t /= d) * t * t + b; }; var easeOutCubic = function easeOutCubic(t, b, c, d) { return c * ((t = t / d - 1) * t * t + 1) + b; }; var easeInOutCubic = function easeInOutCubic(t, b, c, d) { if ((t /= d / 2) < 1) return c / 2 * t * t * t + b; return c / 2 * ((t -= 2) * t * t + 2) + b; }; var easeInQuart = function easeInQuart(t, b, c, d) { return c * (t /= d) * t * t * t + b; }; var easeOutQuart = function easeOutQuart(t, b, c, d) { return -c * ((t = t / d - 1) * t * t * t - 1) + b; }; var easeInOutQuart = function easeInOutQuart(t, b, c, d) { if ((t /= d / 2) < 1) return c / 2 * t * t * t * t + b; return -c / 2 * ((t -= 2) * t * t * t - 2) + b; }; var easeInQuint = function easeInQuint(t, b, c, d) { return c * (t /= d) * t * t * t * t + b; }; var easeOutQuint = function easeOutQuint(t, b, c, d) { return c * ((t = t / d - 1) * t * t * t * t + 1) + b; }; var easeInOutQuint = function easeInOutQuint(t, b, c, d) { if ((t /= d / 2) < 1) return c / 2 * t * t * t * t * t + b; return c / 2 * ((t -= 2) * t * t * t * t + 2) + b; }; var easeInSine = function easeInSine(t, b, c, d) { return -c * Math.cos(t / d * (Math.PI / 2)) + c + b; }; var easeOutSine = function easeOutSine(t, b, c, d) { return c * Math.sin(t / d * (Math.PI / 2)) + b; }; var easeInOutSine = function easeInOutSine(t, b, c, d) { return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b; }; var easeInExpo = function easeInExpo(t, b, c, d) { return t == 0 ? b : c * Math.pow(2, 10 * (t / d - 1)) + b; }; var easeOutExpo = function easeOutExpo(t, b, c, d) { return t == d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b; }; var easeInOutExpo = function easeInOutExpo(t, b, c, d) { if (t == 0) return b; if (t == d) return b + c; if ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b; return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b; }; var easeInCirc = function easeInCirc(t, b, c, d) { return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b; }; var easeOutCirc = function easeOutCirc(t, b, c, d) { return c * Math.sqrt(1 - (t = t / d - 1) * t) + b; }; var easeInOutCirc = function easeInOutCirc(t, b, c, d) { if ((t /= d / 2) < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b; return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b; }; var easeInElastic = function easeInElastic(t, b, c, d) { var s = 1.70158; var p = 0; var a = c; if (t == 0) return b; if ((t /= d) == 1) return b + c; if (!p) p = d * .3; if (a < Math.abs(c)) { a = c; var s = p / 4; } else var s = p / (2 * Math.PI) * Math.asin(c / a); return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b; }; var easeOutElastic = function easeOutElastic(t, b, c, d) { var s = 1.70158; var p = 0; var a = c; if (t == 0) return b; if ((t /= d) == 1) return b + c; if (!p) p = d * .3; if (a < Math.abs(c)) { a = c; var s = p / 4; } else var s = p / (2 * Math.PI) * Math.asin(c / a); return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b; }; var easeInOutElastic = function easeInOutElastic(t, b, c, d) { var s = 1.70158; var p = 0; var a = c; if (t == 0) return b; if ((t /= d / 2) == 2) return b + c; if (!p) p = d * (.3 * 1.5); if (a < Math.abs(c)) { a = c; var s = p / 4; } else var s = p / (2 * Math.PI) * Math.asin(c / a); if (t < 1) return -.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b; return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b; }; var easeInBack = function easeInBack(t, b, c, d) { var s = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1.70158; return c * (t /= d) * t * ((s + 1) * t - s) + b; }; var easeOutBack = function easeOutBack(t, b, c, d) { var s = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1.70158; return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b; }; var easeInOutBack = function easeInOutBack(t, b, c, d) { var s = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1.70158; if ((t /= d / 2) < 1) return c / 2 * (t * t * (((s *= 1.525) + 1) * t - s)) + b; return c / 2 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b; }; var easeInBounce = function easeInBounce(t, b, c, d) { return c - easeOutBounce(d - t, 0, c, d) + b; }; var easeOutBounce = function easeOutBounce(t, b, c, d) { if ((t /= d) < 1 / 2.75) { return c * (7.5625 * t * t) + b; } else if (t < 2 / 2.75) { return c * (7.5625 * (t -= 1.5 / 2.75) * t + .75) + b; } else if (t < 2.5 / 2.75) { return c * (7.5625 * (t -= 2.25 / 2.75) * t + .9375) + b; } else { return c * (7.5625 * (t -= 2.625 / 2.75) * t + .984375) + b; } }; var easeInOutBounce = function easeInOutBounce(t, b, c, d) { if (t < d / 2) return easeInBounce(t * 2, 0, c, d) * .5 + b; return easeOutBounce(t * 2 - d, 0, c, d) * .5 + c * .5 + b; }; /***/ }), /***/ "./library/animations/scroll-to.js": /*!*****************************************!*\ !*** ./library/animations/scroll-to.js ***! \*****************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ scrollToUtil: function() { return /* binding */ scrollToUtil; } /* harmony export */ }); /** * TODO: rework it to use request animation frame * https://stackoverflow.com/questions/21474678/scrolltop-animation-without-jquery * * taken from * https://gist.github.com/andjosh/6764939 * https://github.com/alvarotrigo/skrollTop.js/blob/master/skrollTop.js * */ Math.easeInOutCubic = function (t, b, c, d) { if ((t /= d / 2) < 1) return c / 2 * t * t * t + b; return c / 2 * ((t -= 2) * t * t + 2) + b; }; var scrollToUtil = function scrollToUtil(params) { var element = typeof params.element !== 'undefined' ? params.element : window; var to = params.to; var duration = typeof params.duration !== 'undefined' ? params.duration : 250; var callback = typeof params.callback !== 'undefined' ? params.callback : null; var easing = typeof params.easing !== 'undefined' ? params.easing : Math.easeInOutCubic; var start = element !== window ? element.scrollTop : (window.pageYOffset || document.documentElement.scrollTop) - (document.documentElement.clientTop || 0); var change = to - start; var currentTime = 0; var increment = 16; //same amount of milliseconds as requestAnimationFrame var animateScroll = function animateScroll() { currentTime += increment; var easingValue = duration ? easing(currentTime, start, change, duration) : to; element.scrollTo(0, easingValue); if (currentTime < duration) { setTimeout(animateScroll, increment); } else if (callback) { callback(); } }; animateScroll(); }; /***/ }), /***/ "./library/collapsers/gridder-init.js": /*!********************************************!*\ !*** ./library/collapsers/gridder-init.js ***! \********************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": function() { return /* binding */ gridderInit; } /* harmony export */ }); /* harmony import */ var _function_calls_sliders_slider_advanced__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../function-calls/sliders/slider-advanced */ "./function-calls/sliders/slider-advanced.js"); /* provided dependency */ var jQuery = __webpack_require__(/*! jquery */ "jquery"); /* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery"); function gridderInit() { var gridder = document.querySelector('.js-gridder'); var gridders = document.querySelectorAll('.js-gridder'); if (gridder) { if (jQuery().gridderExpander) { $(function () { gridders.forEach(function (grid, i) { // Call Gridder $(grid).gridderExpander({ scroll: true, scrollOffset: 80, scrollTo: 'panel', // panel or listitem animationSpeed: 400, animationEasing: 'easeInOutExpo', showNav: true, // Show Navigation nextText: '', // Next button text prevText: '', // Previous button text closeText: 'Close', // Close button text onStart: function onStart() { // Gridder Inititialized }, onContent: function onContent() { // advancedSliders(); }, onClosed: function onClosed() { // Gridder Closed } }); }); }); } else { console.log('DSMP Error: Please include gridder library'); } } } /***/ }), /***/ "./library/counters/purecounter.js": /*!*****************************************!*\ !*** ./library/counters/purecounter.js ***! \*****************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _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, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /** * DS Counter 1.0.0 * * based on: https://github.com/srexi/purecounterjs * Written on: April 15, 2021 * * USAGE: */ var PureCounter = /*#__PURE__*/function () { function PureCounter(options) { _classCallCheck(this, PureCounter); this.defaults = { start: 0, end: 100, duration: 2000, delay: 10, once: true, decimals: 0, legacy: true, currency: false, currencysymbol: false, separator: false, separatorsymbol: ',', selector: '.purecounter' }; this.configOptions = Object.assign({}, this.defaults, options || {}); this.registerEventListeners(); } return _createClass(PureCounter, [{ key: "registerEventListeners", value: function registerEventListeners() { var _this = this; var elements = document.querySelectorAll(this.configOptions.selector); var intersectionSupported = this.intersectionListenerSupported(); if (intersectionSupported) { var intersectObserver = new IntersectionObserver(this.animateElements.bind(this), { "root": null, "rootMargin": '20px', "threshold": 0.5 }); elements.forEach(function (element) { intersectObserver.observe(element); }); } else { if (window.addEventListener) { this.animateLegacy(elements); window.addEventListener('scroll', function (e) { _this.animateLegacy(elements); }, { "passive": true }); } } } }, { key: "animateLegacy", value: function animateLegacy(elements) { var _this2 = this; elements.forEach(function (element) { var config = _this2.parseConfig(element); if (config.legacy === true && _this2.elementIsInView(element)) { _this2.animateElements([element]); } }); } }, { key: "animateElements", value: function animateElements(elements, observer) { var _this3 = this; elements.forEach(function (element) { var elm = element.target || element; // Just make sure which element will be used var elementConfig = _this3.parseConfig(elm); // Get config value on that element // If duration is less than or equal zero, just format the 'end' value if (elementConfig.duration <= 0) { return elm.innerHTML = _this3.formatNumber(elementConfig.end, elementConfig); } if (!observer && !_this3.elementIsInView(element) || observer && element.intersectionRatio < 0.5) { var value = elementConfig.start > elementConfig.end ? elementConfig.end : elementConfig.start; return elm.innerHTML = _this3.formatNumber(value, elementConfig); } // If duration is more than 0, then start the counter setTimeout(function () { return _this3.startCounter(elm, elementConfig); }, elementConfig.delay); }); } }, { key: "startCounter", value: function startCounter(element, config) { var _this4 = this; // First, get the increments step var incrementsPerStep = (config.end - config.start) / (config.duration / config.delay); // Next, set the counter mode (Increment or Decrement) var countMode = 'inc'; // Set mode to 'decrement' and 'increment step' to minus if start is larger than end if (config.start > config.end) { countMode = 'dec'; incrementsPerStep *= -1; } // Next, determine the starting value var currentCount = this.parseValue(config.start); // And then print it's value to the page element.innerHTML = this.formatNumber(currentCount, config); // If the config 'once' is true, then set the 'duration' to 0 if (config.once === true) { element.setAttribute('data-purecounter-duration', 0); } // Now, start counting with counterWorker using Interval method based on delay var counterWorker = setInterval(function () { // First, determine the next value base on current value, increment value, and cound mode var nextNum = _this4.nextNumber(currentCount, incrementsPerStep, countMode); // Next, print that value to the page element.innerHTML = _this4.formatNumber(nextNum, config); // Now set that value to the current value, becouse it's already printed currentCount = nextNum; // If the value is larger or less than the 'end' (base on mode), then print the end value and stop the Interval if (currentCount >= config.end && countMode == 'inc' || currentCount <= config.end && countMode == 'dec') { element.innerHTML = _this4.formatNumber(config.end, config); clearInterval(counterWorker); } }, config.delay); } }, { key: "parseConfig", value: function parseConfig(element) { var _this5 = this; // First, we need to declare the base Config // This config will be used if the element doesn't have config var baseConfig = _objectSpread({}, this.configOptions); // Next, gett all 'data-precounter' attributes value. Store to array var configValues = [].filter.call(element.attributes, function (attr) { return /^data-purecounter-/.test(attr.name); }); // Now, we create element config as an empty object var elementConfig = {}; // And then, fill the element config based on config values configValues.forEach(function (e) { var name = e.name.replace('data-purecounter-', '').toLowerCase(); var value = name == 'duration' ? parseInt(_this5.parseValue(e.value) * 1000) : _this5.parseValue(e.value); elementConfig[name] = value; // We will get an object }); // Last marge base config with element config and return it as an object return Object.assign(baseConfig, elementConfig); } /** This function is to get the next number */ }, { key: "nextNumber", value: function nextNumber(number, steps) { var mode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'inc'; // First, get the exact value from the number and step (int or float) number = this.parseValue(number); steps = this.parseValue(steps); // Last, get the next number based on current number, increment step, and count mode // Always return it as float return parseFloat(mode === 'inc' ? number + steps : number - steps); } /** This function is to convert number into currency format */ }, { key: "convertToCurrencySystem", value: function convertToCurrencySystem(number, config) { var symbol = config.currencysymbol || "", // Set the Currency Symbol (if any) limit = config.decimals || 1, // Set the decimal limit (default is 1) number = Math.abs(Number(number)); // Get the absolute value of number // Set the value var value = number >= 1.0e+12 ? "".concat((number / 1.0e+12).toFixed(limit), " T") // Twelve zeros for Trillions : number >= 1.0e+9 ? "".concat((number / 1.0e+9).toFixed(limit), " B") // Nine zeros for Billions : number >= 1.0e+6 ? "".concat((number / 1.0e+6).toFixed(limit), " M") // Six zeros for Millions : number >= 1.0e+3 ? "".concat((number / 1.0e+12).toFixed(limit), " K") // Three zeros for Thausands : number.toFixed(limit); // If less than 1000, print it's value // Apply symbol before the value and return it as string return symbol + value; } /** This function is to get the last formated number */ }, { key: "applySeparator", value: function applySeparator(value, config) { // If config separator is false, delete all separator if (!config.separator) { return value.replace(new RegExp(/,/gi, 'gi'), ''); } // If config separator is true, then create separator return value.replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,").replace(new RegExp(/,/gi, 'gi'), config.separatorsymbol); } /** This function is to get formated number to be printed in the page */ }, { key: "formatNumber", value: function formatNumber(number, config) { // This is the configuration for 'toLocaleString' method var strConfig = { minimumFractionDigits: config.decimals, maximumFractionDigits: config.decimals }; // Set the number if it using currency, then convert. If doesn't, just parse it as float number = config.currency ? this.convertToCurrencySystem(number, config) : parseFloat(number); // Last, apply the number separator using number as string return this.applySeparator(number.toLocaleString(undefined, strConfig), config); } /** This function is to get the parsed value */ }, { key: "parseValue", value: function parseValue(data) { // If number with dot (.), will be parsed as float if (/^[0-9]+\.[0-9]+$/.test(data)) { return parseFloat(data); } // If just number, will be parsed as integer if (/^[0-9]+$/.test(data)) { return parseInt(data); } // If it's boolean string, will be parsed as boolean if (/^true|false/i.test(data)) { return /^true/i.test(data); } // Return it's value as default return data; } /** This function is to detect the element is in view or not. */ }, { key: "elementIsInView", value: function elementIsInView(element) { var top = element.offsetTop; var left = element.offsetLeft; var width = element.offsetWidth; var height = element.offsetHeight; while (element.offsetParent) { element = element.offsetParent; top += element.offsetTop; left += element.offsetLeft; } return top >= window.pageYOffset && left >= window.pageXOffset && top + height <= window.pageYOffset + window.innerHeight && left + width <= window.pageXOffset + window.innerWidth; } /** Just some condition to check browser Intersection Support */ }, { key: "intersectionListenerSupported", value: function intersectionListenerSupported() { return 'IntersectionObserver' in window && 'IntersectionObserverEntry' in window && 'intersectionRatio' in window.IntersectionObserverEntry.prototype; } }]); }(); /* harmony default export */ __webpack_exports__["default"] = (PureCounter); /***/ }), /***/ "./library/media-controls/media-control.js": /*!*************************************************!*\ !*** ./library/media-controls/media-control.js ***! \*************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony import */ var _utils_u_object_extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/u_object_extend */ "./utils/u_object_extend.js"); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _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."); } function _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); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _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; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _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, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var DSMPMediaControls = /*#__PURE__*/function () { function DSMPMediaControls(options) { _classCallCheck(this, DSMPMediaControls); this.defaults = { selector: '.js-video-init', wrapper: 'js-video-wrap', overlay: '.js-video-overlay', buttons: { play: '.btn-play', mute: '.btn-mute', close: '.btn-close' }, classes: { pause: 'is-pause', playing: 'is-playing', sound: 'is-sound', mute: 'is-muted', parentPlay: 'is-video-playing', parentPause: 'is-video-paused', triggerAutoplay: 'js-trigger-autoplay' }, controls: false }; this.config = (0,_utils_u_object_extend__WEBPACK_IMPORTED_MODULE_0__.u_extendObject)(this.defaults, options); this.items = document.querySelectorAll(this.config.selector); this.init(); } return _createClass(DSMPMediaControls, [{ key: "init", value: function init() { var self = this; self.bindTogglePlay = this.togglePlay.bind(this); self.bindToggleMute = this.toggleMute.bind(this); self.bindEndedVideo = this.endedVideo.bind(this); _toConsumableArray(self.items).forEach(function (video) { if (!self.config.controls) { video.controls = false; } var videoContainer = video.parentElement; videoContainer.classList.add(self.config.wrapper); var btnPlay = videoContainer.querySelector(self.config.buttons.play); var btnMute = videoContainer.querySelector(self.config.buttons.mute); // bind events to buttons if (btnPlay) { btnPlay.addEventListener('click', self.bindTogglePlay); } if (btnMute) { btnMute.addEventListener('click', self.bindToggleMute); } // bind event to video itself video.addEventListener('ended', self.bindEndedVideo, false); if (video.classList.contains(self.config.classes.triggerAutoplay)) { self.startPlay(video); } }); } }, { key: "endedVideo", value: function endedVideo(ev) { var self = this; var video = ev.currentTarget; var parentWrap = video.closest('.' + self.config.wrapper); var btnPlay = parentWrap.querySelector(self.config.buttons.play); var videOverlay = parentWrap.querySelector(self.config.overlay); video.pause(); video.currentTime = 0; btnPlay.classList.add(self.config.classes.pause); btnPlay.classList.remove(self.config.classes.playing); parentWrap.classList.remove(self.config.classes.parentPlay); if (videOverlay) { videOverlay.classList.add(self.config.classes.pause); } } }, { key: "togglePlay", value: function togglePlay(ev) { var self = this; var elem = ev.currentTarget; var parentWrap = elem.closest('.' + self.config.wrapper); var video = parentWrap.querySelector(self.config.selector); var videOverlay = parentWrap.querySelector(self.config.overlay); if (video.paused || video.ended) { elem.classList.add(self.config.classes.playing); parentWrap.classList.add(self.config.classes.parentPlay); parentWrap.classList.remove(self.config.classes.parentPause); elem.classList.remove(self.config.classes.pause); video.play(); if (videOverlay) { videOverlay.classList.remove(self.config.classes.pause); } } else { elem.classList.add(self.config.classes.pause); parentWrap.classList.add(self.config.classes.parentPause); parentWrap.classList.remove(self.config.classes.parentPlay); elem.classList.remove(self.config.classes.playing); video.pause(); if (videOverlay) { videOverlay.classList.add(self.config.classes.pause); } } } }, { key: "toggleMute", value: function toggleMute(ev) { var self = this; var elem = ev.currentTarget; var parentWrap = elem.closest('.' + self.config.wrapper); var video = parentWrap.querySelector(self.config.selector); video.muted = !video.muted; if (video.muted) { elem.classList.add(self.config.classes.mute); elem.classList.remove(self.config.classes.sound); } else { elem.classList.add(self.config.classes.sound); elem.classList.remove(self.config.classes.mute); } } }, { key: "stopPlay", value: function stopPlay(elem) { var self = this; var video = elem; var videoContainer = video.parentElement; var btnPlay = videoContainer.querySelector(self.config.buttons.play); if (!video.paused || !video.ended) { btnPlay.classList.add(self.config.classes.pause); // vTag.parentElement.classList.add('is-video-paused'); btnPlay.classList.remove(self.config.classes.playing); video.pause(); } } }, { key: "startPlay", value: function startPlay(elem) { var self = this; var video = elem; var videoContainer = video.parentElement; var btnPlay = videoContainer.querySelector(self.config.buttons.play); if (video.paused || video.ended) { btnPlay.classList.add(self.config.classes.playing); /*vTag.parentElement.classList.add('is-video-playing'); vTag.parentElement.classList.remove('is-video-paused');*/ btnPlay.classList.remove(self.config.classes.pause); video.play(); } } }]); }(); /* harmony default export */ __webpack_exports__["default"] = (DSMPMediaControls); /***/ }), /***/ "./library/sliders/slider-dsbls.js": /*!*****************************************!*\ !*** ./library/sliders/slider-dsbls.js ***! \*****************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony import */ var _slider_options_autoplay__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./slider-options/autoplay */ "./library/sliders/slider-options/autoplay.js"); /* harmony import */ var _slider_options_lazy__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./slider-options/lazy */ "./library/sliders/slider-options/lazy.js"); /* harmony import */ var _swiper_with_tabs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./swiper-with-tabs */ "./library/sliders/swiper-with-tabs.js"); /* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/utils */ "./utils/utils.js"); /* harmony import */ var _slider_options_navigation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./slider-options/navigation */ "./library/sliders/slider-options/navigation.js"); /* harmony import */ var _utils_u_types__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils/u_types */ "./utils/u_types.js"); /* harmony import */ var _slider_options_loop__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./slider-options/loop */ "./library/sliders/slider-options/loop.js"); /* harmony import */ var _slider_options_effects__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./slider-options/effects */ "./library/sliders/slider-options/effects.js"); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _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, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var DSMPSliderDSBLS = /*#__PURE__*/function () { function DSMPSliderDSBLS(sliderID) { _classCallCheck(this, DSMPSliderDSBLS); this.optionsDesktop = {}; this.optionsMobile = { slideClass: 'js-dsbls-nav-item', pagination: { el: '.l-slider-nav__pagination', clickable: true } }; this.optionsNav = { item: '.js-dsbls-nav-item', active: 'is-active', trigger: 'mouseover' }; this.sliderNo = sliderID.replace('js-slider-dsbls-', ''); this.sliderName = sliderID; this.sliderMobileName = sliderID.replace('js-slider-dsbls-', 'js-slider-dsbls-m-'); this.sliderSel = '#' + this.sliderName; this.sliderMobileSel = '#' + this.sliderMobileName; this.optionsNav.element = this.sliderMobileSel; this.sliderElem = document.querySelector(this.sliderSel); this.sliderMobileElem = document.querySelector(this.sliderMobileSel); this.showMobile = (0,_utils_u_types__WEBPACK_IMPORTED_MODULE_5__.u_parseBool)(this.sliderElem.getAttribute('data-slider-is-mobile')); this.isMobile = false; this.isDesktop = false; this.desktopInstance; this.mobileInstance; this.desktopTabs; this.init(); } return _createClass(DSMPSliderDSBLS, [{ key: "init", value: function init() { var self = this; var currentWidth = window.innerWidth; currentWidth < 1025 ? self.isMobile = true : self.isDesktop = true; self.parseOptions(); if (self.isMobile && self.showMobile) self.createMobile(); if (self.isDesktop) self.createDesktop(); window.addEventListener('resize', function () { self.throttleResize(); }); self.throttleResize = (0,_utils_utils__WEBPACK_IMPORTED_MODULE_3__.u_throttled)(function () { self.resizeSlider(); }, 350); } }, { key: "parseOptions", value: function parseOptions() { var self = this; if (self.isMobile && self.showMobile) { var basename = self.sliderMobileName; self.optionsMobile = (0,_slider_options_loop__WEBPACK_IMPORTED_MODULE_6__.isLoopOn)(self.sliderMobileElem, self.optionsMobile); self.optionsMobile = (0,_slider_options_autoplay__WEBPACK_IMPORTED_MODULE_0__.isAutoPlayOn)(self.sliderMobileElem, self.optionsMobile); self.optionsMobile = (0,_slider_options_lazy__WEBPACK_IMPORTED_MODULE_1__.isLazyLoadOn)(self.sliderMobileElem, self.optionsMobile); // .m-slider parent is hardcoded in isNavigationOn options self.optionsMobile = (0,_slider_options_navigation__WEBPACK_IMPORTED_MODULE_4__.isNavigationOn)(self.sliderMobileElem, self.optionsMobile, basename, self.sliderNo); } if (self.isDesktop) { var _basename = self.sliderName; self.optionsDesktop = (0,_slider_options_loop__WEBPACK_IMPORTED_MODULE_6__.isLoopOn)(self.sliderElem, self.optionsDesktop); self.optionsDesktop = (0,_slider_options_autoplay__WEBPACK_IMPORTED_MODULE_0__.isAutoPlayOn)(self.sliderElem, self.optionsDesktop); self.optionsDesktop = (0,_slider_options_lazy__WEBPACK_IMPORTED_MODULE_1__.isLazyLoadOn)(self.sliderElem, self.optionsDesktop); self.optionsDesktop = (0,_slider_options_effects__WEBPACK_IMPORTED_MODULE_7__.isEffectOn)(self.sliderElem, self.optionsDesktop); // .m-slider parent is hardcoded in isNavigationOn options self.optionsDesktop = (0,_slider_options_navigation__WEBPACK_IMPORTED_MODULE_4__.isNavigationOn)(self.sliderElem, self.optionsDesktop, _basename, self.sliderNo); } } }, { key: "createDesktop", value: function createDesktop() { var self = this; self.desktopInstance = new Swiper(self.sliderSel, self.optionsDesktop); if (self.desktopInstance.initialized) { self.desktopTabs = new _swiper_with_tabs__WEBPACK_IMPORTED_MODULE_2__["default"](self.desktopInstance, self.optionsNav); } } }, { key: "createMobile", value: function createMobile() { var self = this; self.mobileInstance = new Swiper(self.sliderMobileSel, self.optionsMobile); } }, { key: "resizeSlider", value: function resizeSlider() { var self = this; var newWidth = window.innerWidth; if (newWidth < 1025) { if (!self.isMobile) { if (typeof self.desktopInstance !== "undefined") { self.desktopTabs.unbindTabs(); self.desktopInstance.destroy(); self.desktopInstance = undefined; } if (self.showMobile) { self.createMobile(); } self.isDesktop = false; self.isMobile = true; } } else { if (!self.isDesktop) { if (typeof self.mobileInstance !== "undefined") { self.mobileInstance.destroy(); self.mobileInstance = undefined; } self.createDesktop(); self.isMobile = false; self.isDesktop = true; } } } }]); }(); /* harmony default export */ __webpack_exports__["default"] = (DSMPSliderDSBLS); /***/ }), /***/ "./library/sliders/slider-options/autoplay.js": /*!****************************************************!*\ !*** ./library/sliders/slider-options/autoplay.js ***! \****************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ isAutoPlayOn: function() { return /* binding */ isAutoPlayOn; } /* harmony export */ }); /** * AutoPlay Slider Options */ var isAutoPlayOn = function isAutoPlayOn(elem, options) { if (!elem) return options; var isAutoplay = elem.getAttribute('data-slider-autoplay'); var isAutoplayDelay = elem.getAttribute('data-slider-autoplay-delay'); if (isAutoplay === 'true') { options.autoplay = {}; options.autoplay.disableOnInteraction = false; options.autoplay.delay = isAutoplayDelay ? parseInt(isAutoplayDelay) : 3000; } return options; }; /***/ }), /***/ "./library/sliders/slider-options/breakpoints.js": /*!*******************************************************!*\ !*** ./library/sliders/slider-options/breakpoints.js ***! \*******************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ isBreakpointsOn: function() { return /* binding */ isBreakpointsOn; } /* harmony export */ }); /* eslint-disable linebreak-style */ /* eslint-disable import/prefer-default-export */ /* eslint-disable prefer-const */ /* eslint-disable keyword-spacing */ /** * Break Points Options */ var isBreakpointsOn = function isBreakpointsOn(elem, options) { if (!elem) return options; var noColumns = parseInt(elem.getAttribute('data-slider-columns')); var columnsGap = parseInt(elem.getAttribute('data-slider-columns-gap')); if (noColumns) { options.slidesPerView = noColumns; options.breakpoints = { 320: { slidesPerView: noColumns > 3 ? 1 : 1, spaceBetween: 10 }, 576: { slidesPerView: noColumns > 3 ? 2 : 1, spaceBetween: columnsGap > 20 ? 15 : 10 }, 1024: { slidesPerView: noColumns, spaceBetween: columnsGap > 30 ? 25 : 20 }, 1440: { slidesPerView: noColumns, spaceBetween: columnsGap || 20 } }; } else { options.breakpoints = { 320: { slidesPerView: 1 }, 576: { slidesPerView: 2, spaceBetween: columnsGap > 20 ? 15 : 10 }, 1024: { slidesPerView: 'auto', spaceBetween: columnsGap > 30 ? 25 : 20 } }; } return options; }; /***/ }), /***/ "./library/sliders/slider-options/effects.js": /*!***************************************************!*\ !*** ./library/sliders/slider-options/effects.js ***! \***************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ isEffectOn: function() { return /* binding */ isEffectOn; } /* harmony export */ }); var isEffectOn = function isEffectOn(elem, options) { if (!elem) return options; var isEffect = elem.getAttribute('data-slider-effect-transition'); options.effect = {}; switch (isEffect) { case 'fade': options.effect = 'fade'; options.fadeEffect = {}; options.fadeEffect.crossFade = true; break; case 'cube': options.effect = 'cube'; break; case 'coverflow': options.effect = 'coverflow'; break; case 'cards': options.effect = 'cards'; break; case 'flip': options.effect = 'flip'; break; } return options; }; /***/ }), /***/ "./library/sliders/slider-options/lazy.js": /*!************************************************!*\ !*** ./library/sliders/slider-options/lazy.js ***! \************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ isLazyLoadOn: function() { return /* binding */ isLazyLoadOn; } /* harmony export */ }); /** * Lazy Load Slider Options * * TODO: missing option for data option, create preloader div via js, and change image src to data-src, right now all this done manually */ var isLazyLoadOn = function isLazyLoadOn(elem, options) { if (!elem) return options; //let isLazyLoad = elem.getAttribute('data-slider-lazy'); options.preloadImages = false; options.lazy = {}; options.lazy.loadPrevNext = true; options.loadOnTransitionStart = true; return options; }; /***/ }), /***/ "./library/sliders/slider-options/loop.js": /*!************************************************!*\ !*** ./library/sliders/slider-options/loop.js ***! \************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ isLoopOn: function() { return /* binding */ isLoopOn; } /* harmony export */ }); /** * Loop Slider Options */ var isLoopOn = function isLoopOn(elem, options) { if (!elem) return options; var isLoop = elem.getAttribute('data-slider-loop'); if (isLoop === 'true') { options.loop = true; options.centeredSlides = true; } return options; }; /***/ }), /***/ "./library/sliders/slider-options/navigation.js": /*!******************************************************!*\ !*** ./library/sliders/slider-options/navigation.js ***! \******************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ isNavigationOn: function() { return /* binding */ isNavigationOn; } /* harmony export */ }); /** * Navigation Slider Options */ var isNavigationOn = function isNavigationOn(elem, options, basename, currentID) { var nextEl = '.swiper-button-next'; var prevEl = '.swiper-button-prev'; var nextID, prevID, sliderNext, sliderPrev; if (!elem) return options; var isNavigation = elem.getAttribute('data-slider-navigation'); if (isNavigation) { options.navigation = {}; if (basename && typeof currentID !== "undefined") { nextID = "".concat(basename, "-next-").concat(currentID); prevID = "".concat(basename, "-prev-").concat(currentID); } var sliderParent = elem.closest('.m-slider'); if (sliderParent) { sliderNext = sliderParent.querySelector(nextEl); sliderPrev = sliderParent.querySelector(prevEl); } if (sliderNext && nextID) { sliderNext.setAttribute('id', nextID); options.navigation.nextEl = "#".concat(nextID); } if (sliderPrev && prevID) { sliderPrev.setAttribute('id', prevID); options.navigation.prevEl = "#".concat(prevID); } } else { options.navigation = false; } return options; }; /***/ }), /***/ "./library/sliders/slider-options/slide-to-clicked-slide.js": /*!******************************************************************!*\ !*** ./library/sliders/slider-options/slide-to-clicked-slide.js ***! \******************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ isSlideToClicedSlideOn: function() { return /* binding */ isSlideToClicedSlideOn; } /* harmony export */ }); /** * Slide to Clicked Slide Slider Options */ var isSlideToClicedSlideOn = function isSlideToClicedSlideOn(elem, options) { if (!elem) return options; var slideToClicedSlide = elem.getAttribute('data-slider-slide-to-clicked-slide'); if (slideToClicedSlide === 'true') { options.slideToClicedSlide = true; } return options; }; /***/ }), /***/ "./library/sliders/swiper-with-tabs.js": /*!*********************************************!*\ !*** ./library/sliders/swiper-with-tabs.js ***! \*********************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony import */ var _utils_u_is_touch_device__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/u_is-touch-device */ "./utils/u_is-touch-device.js"); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _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, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var SwiperWithTabs = /*#__PURE__*/function () { function SwiperWithTabs(swiper, options) { _classCallCheck(this, SwiperWithTabs); this.defaults = { element: '.l-nav', item: '.c-nav__item', active: 'is-active', trigger: 'click' }; this.isTouch = false; // util function to check for touch device this.isTouchDevice(); // if swiper is not initialized, end the script if (!swiper.initialized) { console.log('swiper not initialized'); return; } this.swiper = swiper; this.config = Object.assign({}, this.defaults, options || {}); this.selector = "".concat(this.config.element, " ").concat(this.config.item); this.items = document.querySelectorAll(this.selector); // reference to click function this.tabClicked = this.tabClick.bind(this); this.init(); } return _createClass(SwiperWithTabs, [{ key: "init", value: function init() { var self = this; // add event that catches slide changes self.swiperSlideChange(); // bind events that catches tabs changes self.bindTabs(); } }, { key: "bindTabs", value: function bindTabs() { var self = this; var elem = self.items; elem.forEach(function (tab) { tab.addEventListener(self.config.trigger, self.tabClicked, { passive: true }); if (self.isTouch && self.config.trigger === 'mouseover') { tab.addEventListener('touchstart', self.tabClicked, { passive: true }); } }); } }, { key: "unbindTabs", value: function unbindTabs() { var self = this; var elem = self.items; elem.forEach(function (tab) { tab.removeEventListener(self.config.trigger, self.tabClicked); if (self.isTouch && self.config.trigger === 'mouseover') { tab.removeEventListener('touchstart', self.tabClicked); } }); } }, { key: "tabClick", value: function tabClick(ev) { var self = this; var currentTab = ev.currentTarget; var elem = self.items; var clickedTab; elem.forEach(function (tab, i) { if (currentTab === tab) { clickedTab = i; } tab.classList.remove(self.config.active); }); currentTab.classList.add(self.config.active); self.swiper.slideTo(clickedTab); } }, { key: "tabChange", value: function tabChange(index) { var self = this; var elem = self.items; elem.forEach(function (tab) { tab.classList.remove(self.config.active); }); elem.forEach(function (tab, i) { if (index === i) { tab.classList.add(self.config.active); } }); } }, { key: "isTouchDevice", value: function isTouchDevice() { var self = this; if ((0,_utils_u_is_touch_device__WEBPACK_IMPORTED_MODULE_0__.u_isTouchDevice)()) { self.isTouch = true; } } }, { key: "swiperSlideChange", value: function swiperSlideChange() { var self = this; self.swiper.on('slideChange', function () { var currentSlide = self.swiper.activeIndex; self.tabChange(currentSlide); }); } }]); }(); /* harmony default export */ __webpack_exports__["default"] = (SwiperWithTabs); /***/ }), /***/ "./library/tabs-accordions/DSMPAccordions.js": /*!***************************************************!*\ !*** ./library/tabs-accordions/DSMPAccordions.js ***! \***************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony import */ var _utils_u_object_extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/u_object_extend */ "./utils/u_object_extend.js"); /* harmony import */ var _utils_u_slide_up_down__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/u_slide-up-down */ "./utils/u_slide-up-down.js"); /* harmony import */ var _utils_u_fade_in_out__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/u_fade-in-out */ "./utils/u_fade-in-out.js"); /* harmony import */ var _utils_u_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/u_types */ "./utils/u_types.js"); /* harmony import */ var _animations_scroll_to__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../animations/scroll-to */ "./library/animations/scroll-to.js"); /* harmony import */ var _animations_easings_es6__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../animations/easings-es6 */ "./library/animations/easings-es6.js"); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _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."); } function _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); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _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; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _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, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var DSMPAccordions = /*#__PURE__*/function () { function DSMPAccordions(selector, options) { _classCallCheck(this, DSMPAccordions); // default wrapper value this.wrapper = '.js-acc-wrapper'; this.defaults = { selectors: { item: '.js-acc-item', trigger: '.js-acc-button', content: '.js-acc-content' }, gallery: { container: '.js-acc-gallery', item: '.js-acc-media' }, classes: { active: 'is-active', focus: 'focus', display: 'block' }, animation: { content: true, // true: use js , false: use css gallery: false // true: use js , false: use css }, attr: { close: 'data-close', open: 'data-expand', gallery: 'data-gallery', startClosed: 'data-start-closed', animationContent: 'data-animation', animationGallery: 'data-gallery-animation', display: 'data-acc-display', scrollToView: 'data-scroll-to-view' }, opt: { close: false, expand: false, hasGallery: false, startClosed: false, scrollToView: false }, aria: { button: 'header', content: 'content' } }; this.config = (0,_utils_u_object_extend__WEBPACK_IMPORTED_MODULE_0__.u_extendObject)(this.defaults, options); // check if we changed selector if (typeof selector !== 'undefined') { this.wrapper = selector; } // get name to use for aria id's and controls this.getAriaName(); this.selector = document.querySelector(this.wrapper); this.eventsListeners = {}; this.parseOptions(); this.trigger = this.selector.querySelectorAll(this.config.selectors.trigger); this.items = this.selector.querySelectorAll(this.config.selectors.item); if (this.config.opt.hasGallery) { this.galleryItems = this.selector.querySelectorAll(this.config.gallery.item); } // array for stashing reference to binded events this.handlers = []; this.previousIndex = 0; this.currentIndex = 0; this.init(); } return _createClass(DSMPAccordions, [{ key: "init", value: function init() { this.addAria(); this.prepareForAnimation(); this.accordionBindEvents(); } }, { key: "on", value: function on(events, callback) { var self = this; if (typeof callback !== 'function') return; events.split(' ').forEach(function (event, i) { if (!self.eventsListeners[event]) self.eventsListeners[event] = []; self.eventsListeners[event].push(callback); }); } }, { key: "off", value: function off(events, handler) { var self = this; if (!self.eventsListeners) return; events.split(' ').forEach(function (event) { if (typeof handler === 'undefined') { self.eventsListeners[event] = []; } else if (self.eventsListeners[event]) { self.eventsListeners[event].forEach(function (eventHandler, index) { if (eventHandler === handler) { self.eventsListeners[event].splice(index, 1); } }); } }); } }, { key: "emit", value: function emit() { var self = this; if (!self.eventsListeners) return self; var events; var data; var context; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } if (typeof args[0] === 'string' || Array.isArray(args[0])) { events = args[0]; data = args.slice(1, args.length); context = self; } else { events = args[0].events; data = args[0].data; context = args[0].context || self; } //console.log(events, data, context); data.unshift(context); var eventsArray = Array.isArray(events) ? events : events.split(' '); eventsArray.forEach(function (event) { if (self.eventsListeners && self.eventsListeners[event]) { self.eventsListeners[event].forEach(function (eventHandler) { eventHandler.apply(context, data); }); } }); } }, { key: "accordionBindEvents", value: function accordionBindEvents() { var self = this; var elem = self.trigger; self.addListenerFocus = self.addListenerFocus.bind(self); self.addListenerBlur = self.addListenerBlur.bind(self); self.addKeyListener = self.addKeyListener.bind(self); self.on = self.on.bind(self); self.off = self.off.bind(self); self.emit = self.emit.bind(self); elem.forEach(function (acc, i) { var handlerFunc = self.accordionNavClick.bind(self, i); self.handlers.push(handlerFunc); acc.addEventListener('click', handlerFunc, { passive: true }); acc.addEventListener('focus', self.addListenerFocus, { passive: true }); acc.addEventListener('blur', self.addListenerBlur, { passive: true }); }); var accordion = self.selector; accordion.addEventListener('keydown', self.addKeyListener, { passive: true }); } }, { key: "accordionUnbindEvents", value: function accordionUnbindEvents() { var self = this; var elem = self.trigger; elem.forEach(function (acc, i) { var elemParent = acc.closest(self.config.selectors.item); var elemContent = elemParent.querySelector(self.config.selectors.content); var control, header; if (self.config.aria.name) { control = "".concat(self.config.aria.name, "-").concat(self.config.aria.content, "-").concat(i); header = "".concat(self.config.aria.name, "-").concat(self.config.aria.button, "-").concat(i); } acc.removeAttribute('aria-expanded', ''); elemContent.removeAttribute('aria-hidden', ''); if (self.config.aria.name) { acc.removeAttribute('aria-controls', ''); acc.removeAttribute('id', ''); elemContent.removeAttribute('id', ''); elemContent.removeAttribute('aria-labelledby', ''); } elemContent.removeAttribute('role', ''); acc.removeEventListener('click', self.handlers[i]); acc.removeEventListener('focus', self.addListenerFocus); acc.removeEventListener('blur', self.addListenerBlur); }); var accordion = self.selector; accordion.removeEventListener('keydown', self.addKeyListener); self.removeStyles(); } }, { key: "accordionNavClick", value: function accordionNavClick(i, ev) { var self = this; var currentItemClicked = ev.currentTarget; self.accordionContentchange(i, currentItemClicked, ev); } }, { key: "accordionContentchange", value: function accordionContentchange(i, elem, ev) { var self = this; var currentItemClicked = elem; var elems = self.items; var currentItem = currentItemClicked.closest(self.config.selectors.item); var currentItemContent = currentItem.querySelector(self.config.selectors.content); var expanded = currentItemClicked.getAttribute('aria-expanded') === 'true' || false; if (currentItem.classList.contains(self.config.classes.active)) { if (self.config.opt.close) { if (self.config.animation.content) { (0,_utils_u_slide_up_down__WEBPACK_IMPORTED_MODULE_1__.u_slideUp)(currentItemContent, { display: self.config.classes.display }); } currentItem.classList.remove(self.config.classes.active); currentItemClicked.setAttribute('aria-expanded', !expanded); currentItemContent.setAttribute('aria-hidden', expanded); } } else { if (!self.config.opt.expand) { elems.forEach(function (item) { var itemContent = item.querySelector(self.config.selectors.content); var itemTrigger = item.querySelector(self.config.selectors.trigger); if (self.config.animation.content) { (0,_utils_u_slide_up_down__WEBPACK_IMPORTED_MODULE_1__.u_slideUp)(itemContent, { display: self.config.classes.display }); } item.classList.remove(self.config.classes.active); itemTrigger.setAttribute('aria-expanded', expanded); itemContent.setAttribute('aria-hidden', !expanded); }); if (self.config.animation.content) { (0,_utils_u_slide_up_down__WEBPACK_IMPORTED_MODULE_1__.u_slideDown)(currentItemContent, { display: self.config.classes.display }); } currentItem.classList.add(self.config.classes.active); currentItemClicked.setAttribute('aria-expanded', !expanded); currentItemContent.setAttribute('aria-hidden', expanded); } else { if (self.config.animation.content) { (0,_utils_u_slide_up_down__WEBPACK_IMPORTED_MODULE_1__.u_slideDown)(currentItemContent, { display: self.config.classes.display }); } currentItem.classList.add(self.config.classes.active); currentItemClicked.setAttribute('aria-expanded', !expanded); currentItemContent.setAttribute('aria-hidden', expanded); } if (self.config.opt.hasGallery) { self.accordionChangeGallery(i); } if (self.config.opt.scrollToView) { if (self.currentIndex < i) { self.scrollToAccordion(i); } } } this.previousIndex = this.currentIndex; this.currentIndex = i; self.emit('accordionChange', ev); } }, { key: "nextAccordion", value: function nextAccordion() { var self = this; var nextElem = self.currentIndex; var numberOfElem = self.items.length; nextElem === numberOfElem - 1 ? nextElem = 0 : nextElem += 1; var nextElemItem = self.items[nextElem]; self.accordionContentchange(nextElem, nextElemItem, null); } }, { key: "prevAccordion", value: function prevAccordion() { var self = this; var prevElem = self.currentIndex; var numberOfElem = self.items.length; prevElem === 0 ? prevElem = numberOfElem - 1 : prevElem -= 1; var prevElemItem = self.items[prevElem]; self.accordionContentchange(prevElem, prevElemItem, null); } }, { key: "accordionChangeGallery", value: function accordionChangeGallery(i) { var self = this; var galleryItems = _toConsumableArray(self.galleryItems); galleryItems.forEach(function (gallery) { if (self.config.animation.gallery) { (0,_utils_u_fade_in_out__WEBPACK_IMPORTED_MODULE_2__.u_fadeOut)(gallery, { complete: function complete() { gallery.classList.remove(self.config.classes.active); var newItem = galleryItems[i]; (0,_utils_u_fade_in_out__WEBPACK_IMPORTED_MODULE_2__.u_fadeIn)(newItem, { duration: 50 }); newItem.classList.add(self.config.classes.active); } }); } else { gallery.classList.remove(self.config.classes.active); } }); if (!self.config.animation.gallery) { galleryItems[i].classList.add(self.config.classes.active); } } }, { key: "prepareForAnimation", value: function prepareForAnimation() { /* check whether items contains is-active class, if its not start closed all, first item should have is-active class and its content should be set to display block / flex, otherwise, hide it */ var self = this; var items = self.items; var index = 0; var activeFound = false; if (self.config.animation.content) { items.forEach(function (list, i) { var itemContent = list.querySelector(self.config.selectors.content); if (list.classList.contains(self.config.classes.active)) { if (!self.config.opt.startClosed) { itemContent.style.display = self.config.classes.display; } index = i; activeFound = true; } else { itemContent.style.display = 'none'; } }); if (!activeFound && !self.config.opt.startClosed) { var item0Content = items[0].querySelector(self.config.selectors.content); items[0].classList.add(self.config.classes.active); item0Content.style.display = self.config.classes.display; } } } }, { key: "removeStyles", value: function removeStyles() { var self = this; var items = self.items; if (self.config.animation.content) { items.forEach(function (list, i) { var itemContent = list.querySelector(self.config.selectors.content); itemContent.style.display = ''; }); } } }, { key: "parseOptions", value: function parseOptions() { var self = this; var isSelfClose = (0,_utils_u_types__WEBPACK_IMPORTED_MODULE_3__.u_parseBool)(self.selector.getAttribute(self.config.attr.close)) || self.config.opt.close; if (isSelfClose) { isSelfClose ? self.config.opt.close = true : self.config.opt.close = false; } /** * if leave open is true, self close should automatically be true, * otherwise we wont be able to close on self click */ var isLeaveOpen = (0,_utils_u_types__WEBPACK_IMPORTED_MODULE_3__.u_parseBool)(self.selector.getAttribute(self.config.attr.open)) || self.config.opt.expand; if (isLeaveOpen) { self.config.opt.expand = true; self.config.opt.close = true; } else { self.config.opt.expand = false; } var isStartClosed = (0,_utils_u_types__WEBPACK_IMPORTED_MODULE_3__.u_parseBool)(self.selector.getAttribute(self.config.attr.startClosed)) || self.config.opt.startClosed; if (isStartClosed) { self.config.opt.startClosed = true; self.config.opt.close = true; } var isGallery = (0,_utils_u_types__WEBPACK_IMPORTED_MODULE_3__.u_parseBool)(self.selector.getAttribute(self.config.attr.gallery)) || self.config.opt.hasGallery; if (isGallery) { self.config.opt.hasGallery = true; // if we have gallery, self close and expand is by default off self.config.opt.expand = false; self.config.opt.close = false; self.config.opt.startClosed = false; } var animateContent = self.selector.getAttribute(self.config.attr.animationContent); if (animateContent) { animateContent === 'js' ? self.config.animation.content = true : self.config.animation.content = false; } var animateGallery = self.selector.getAttribute(self.config.attr.animationGallery); if (animateGallery) { animateGallery === 'js' ? self.config.animation.gallery = true : self.config.animation.gallery = false; } var display = self.selector.getAttribute(self.config.attr.display) || self.config.classes.display; self.config.classes.display = display === 'flex' ? 'flex' : 'block'; var isScrollToView = (0,_utils_u_types__WEBPACK_IMPORTED_MODULE_3__.u_parseBool)(self.selector.getAttribute(self.config.attr.scrollToView)) || self.config.opt.scrollToView; if (isScrollToView) { self.config.opt.scrollToView = true; self.config.opt.expand = false; } self.emit('optionsParsed'); } // small function to check for valid ID of wrapper }, { key: "isValidId", value: function isValidId(s) { return /^[^\s]+$/.test(s); } }, { key: "getAriaName", value: function getAriaName() { var ariaName = this.wrapper.slice(1); if (this.isValidId(ariaName)) { this.config.aria.name = ariaName; } else { this.config.aria.name = false; } } }, { key: "addAria", value: function addAria() { var self = this; var elem = self.trigger; elem.forEach(function (acc, i) { var elemParent = acc.closest(self.config.selectors.item); var elemContent = elemParent.querySelector(self.config.selectors.content); var control, header; if (self.config.aria.name) { control = "".concat(self.config.aria.name, "-").concat(self.config.aria.content, "-").concat(i); header = "".concat(self.config.aria.name, "-").concat(self.config.aria.button, "-").concat(i); } if (elemParent.classList.contains(self.config.classes.active)) { acc.setAttribute('aria-expanded', true); elemContent.setAttribute('aria-hidden', false); } else { acc.setAttribute('aria-expanded', false); elemContent.setAttribute('aria-hidden', true); } if (self.config.aria.name) { acc.setAttribute('aria-controls', control); acc.setAttribute('id', header); elemContent.setAttribute('id', control); elemContent.setAttribute('aria-labelledby', header); } elemContent.setAttribute('role', 'region'); }); } }, { key: "addListenerFocus", value: function addListenerFocus(ev) { var self = this; var elem = ev.target; elem.classList.add(self.config.classes.focus); } }, { key: "addListenerBlur", value: function addListenerBlur(ev) { var self = this; var elem = ev.target; elem.classList.remove(self.config.classes.focus); } }, { key: "addKeyListener", value: function addKeyListener(ev) { var self = this; var elem = ev.target; var key = ev.which.toString(); var triggers = _toConsumableArray(self.trigger); var triggerClass = self.config.selectors.trigger.slice(1); // 33 = Page Up, 34 = Page Down var ctrlModifier = ev.ctrlKey && key.match(/33|34/); if (elem.classList.contains(triggerClass)) { // Up/ Down arrow and Control + Page Up/ Page Down keyboard operations // 38 = Up, 40 = Down if (key.match(/38|40/) || ctrlModifier) { var index = triggers.indexOf(elem); var direction = key.match(/34|40/) ? 1 : -1; var length = triggers.length; var newIndex = (index + length + direction) % length; triggers[newIndex].focus(); } else if (key.match(/35|36/)) { // 35 = End, 36 = Home keyboard operations switch (key) { // Go to first accordion case '36': triggers[0].focus(); break; // Go to last accordion case '35': triggers[triggers.length - 1].focus(); break; } } } } }, { key: "scrollToAccordion", value: function scrollToAccordion(currentIndex) { var self = this; var elem = self.trigger[0]; var scrollCurrentContent = elem.getBoundingClientRect(); var elemHeight = scrollCurrentContent.height; var offset = elemHeight * currentIndex; var currentScrollPos = window.pageYOffset || document.documentElement.scrollTop; var scrollTo = scrollCurrentContent.top + currentScrollPos + offset - 80; // scrollIntoView() (0,_animations_scroll_to__WEBPACK_IMPORTED_MODULE_4__.scrollToUtil)({ to: scrollTo, duration: 0, easing: _animations_easings_es6__WEBPACK_IMPORTED_MODULE_5__.easeInQuad }); } }]); }(); /* harmony default export */ __webpack_exports__["default"] = (DSMPAccordions); /***/ }), /***/ "./library/tabs-accordions/DSMPTabs-dropdown.js": /*!******************************************************!*\ !*** ./library/tabs-accordions/DSMPTabs-dropdown.js ***! \******************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony import */ var _DSMPTabsClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./DSMPTabsClass */ "./library/tabs-accordions/DSMPTabsClass.js"); /* harmony import */ var _utils_u_object_extend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/u_object_extend */ "./utils/u_object_extend.js"); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _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, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get.bind(); } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); } function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } var DSMPTabsDropdown = /*#__PURE__*/function (_DSMPTabsClass) { function DSMPTabsDropdown(options) { var _this; _classCallCheck(this, DSMPTabsDropdown); _this = _callSuper(this, DSMPTabsDropdown); _this.defaults = { wrapper: '.js-tabsDrop-wrapper', selectors: { dropdown: '.js-tabs-dropdown', panel: '.js-tabs-panel' }, classes: { active: 'is-active' }, data: 'data-tab' }; _this.config = (0,_utils_u_object_extend__WEBPACK_IMPORTED_MODULE_1__.u_extendObject)(_this.defaults, options); _this.selectorDropdown = "".concat(_this.config.wrapper, " ").concat(_this.config.selectors.dropdown); _this.itemsDropdown = document.querySelectorAll(_this.selectorDropdown); _this.init(); return _this; } _inherits(DSMPTabsDropdown, _DSMPTabsClass); return _createClass(DSMPTabsDropdown, [{ key: "init", value: function init() { this.bindFunctions(); this.bindTabsDropdownEvent(); } }, { key: "bindFunctions", value: function bindFunctions() { this.tabDropdownChange = this.tabDropdownChange.bind(this); } }, { key: "bindTabsDropdownEvent", value: function bindTabsDropdownEvent() { var self = this; var dropdowns = self.itemsDropdown; dropdowns.forEach(function (dropdown) { dropdown.addEventListener('change', self.tabDropdownChange); }); } }, { key: "tabDropdownChange", value: function tabDropdownChange(ev) { var currDropdown = ev.currentTarget; var currentTabID = currDropdown.value; var currentIndex = currDropdown.options.selectedIndex; for (var i = 0; i < currDropdown.options.length; i += 1) { currDropdown.options[i].removeAttribute('selected'); } currDropdown.options[currentIndex].setAttribute('selected', 'selected'); _get(_getPrototypeOf(DSMPTabsDropdown.prototype), "tabPanelChange", this).call(this, currentTabID); } }, { key: "unbindTabsDropdownEvent", value: function unbindTabsDropdownEvent() { var self = this; var dropdowns = self.itemsDropdown; dropdowns.forEach(function (dropdown) { dropdown.removeEventListener('change', self.tabDropdownChange); }); } }]); }(_DSMPTabsClass__WEBPACK_IMPORTED_MODULE_0__["default"]); /* harmony default export */ __webpack_exports__["default"] = (DSMPTabsDropdown); /***/ }), /***/ "./library/tabs-accordions/DSMPTabs-tab.js": /*!*************************************************!*\ !*** ./library/tabs-accordions/DSMPTabs-tab.js ***! \*************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony import */ var _DSMPTabsClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./DSMPTabsClass */ "./library/tabs-accordions/DSMPTabsClass.js"); /* harmony import */ var _utils_u_object_extend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/u_object_extend */ "./utils/u_object_extend.js"); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _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, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get.bind(); } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); } function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } var DSMPTabsTab = /*#__PURE__*/function (_DSMPTabsClass) { function DSMPTabsTab(options) { var _this; _classCallCheck(this, DSMPTabsTab); _this = _callSuper(this, DSMPTabsTab); _this.defaults = { wrapper: '.js-tabs-wrapper', selectors: { nav: '.js-tabs-nav-item', panel: '.js-tabs-panel' }, classes: { active: 'is-active' }, data: 'data-tab' }; _this.config = (0,_utils_u_object_extend__WEBPACK_IMPORTED_MODULE_1__.u_extendObject)(_this.defaults, options); _this.selector = "".concat(_this.config.wrapper, " ").concat(_this.config.selectors.nav); _this.items = document.querySelectorAll(_this.selector); _this.init(); return _this; } _inherits(DSMPTabsTab, _DSMPTabsClass); return _createClass(DSMPTabsTab, [{ key: "init", value: function init() { _get(_getPrototypeOf(DSMPTabsTab.prototype), "bindFunctions", this).call(this); _get(_getPrototypeOf(DSMPTabsTab.prototype), "bindTabNavEvent", this).call(this); } }]); }(_DSMPTabsClass__WEBPACK_IMPORTED_MODULE_0__["default"]); /* harmony default export */ __webpack_exports__["default"] = (DSMPTabsTab); /***/ }), /***/ "./library/tabs-accordions/DSMPTabs-tabdropdown.js": /*!*********************************************************!*\ !*** ./library/tabs-accordions/DSMPTabs-tabdropdown.js ***! \*********************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony import */ var _utils_u_object_extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/u_object_extend */ "./utils/u_object_extend.js"); /* harmony import */ var _DSMPTabsClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./DSMPTabsClass */ "./library/tabs-accordions/DSMPTabsClass.js"); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _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, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get.bind(); } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); } function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } var DSMPTabsTabDropdown = /*#__PURE__*/function (_DSMPTabsClass) { function DSMPTabsTabDropdown(options) { var _this; _classCallCheck(this, DSMPTabsTabDropdown); _this = _callSuper(this, DSMPTabsTabDropdown); _this.defaults = { wrapper: '.js-tabsTabDrop-wrapper', selectors: { nav: '.js-tabs-nav-item', dropdown: '.js-tabs-dropdown', panel: '.js-tabs-panel' // underline: '.js-tabs-nav-underline', }, classes: { active: 'is-active' }, data: 'data-tab' }; _this.config = (0,_utils_u_object_extend__WEBPACK_IMPORTED_MODULE_0__.u_extendObject)(_this.defaults, options); _this.selectorTabs = "".concat(_this.config.wrapper, " ").concat(_this.config.selectors.nav); _this.selectorDropdown = "".concat(_this.config.wrapper, " ").concat(_this.config.selectors.dropdown); _this.items = document.querySelectorAll(_this.selectorTabs); _this.itemsDropdown = document.querySelectorAll(_this.selectorDropdown); _this.initTabsDropdown(); return _this; } _inherits(DSMPTabsTabDropdown, _DSMPTabsClass); return _createClass(DSMPTabsTabDropdown, [{ key: "initTabsDropdown", value: function initTabsDropdown() { this.bindFunctions(); this.bindTabNavEv(); this.bindTabsDropdownEvent(); } }, { key: "bindFunctions", value: function bindFunctions() { this.tabDropdownChange = this.tabDropdownChange.bind(this); this.tabNavClick = this.tabNavClick.bind(this); } }, { key: "bindTabsDropdownEvent", value: function bindTabsDropdownEvent() { var self = this; var dropdowns = self.itemsDropdown; dropdowns.forEach(function (dropdown) { dropdown.addEventListener('change', self.tabDropdownChange); }); } }, { key: "bindTabNavEv", value: function bindTabNavEv() { var self = this; var elem = self.items; elem.forEach(function (tab) { tab.addEventListener('click', self.tabNavClick, { passive: true }); }); } }, { key: "tabNavClick", value: function tabNavClick(ev) { var self = this; var currentTab = ev.currentTarget; var currentTabID = _get(_getPrototypeOf(DSMPTabsTabDropdown.prototype), "getNavTabID", this).call(this, currentTab); var currentSelector = currentTab.closest(self.config.wrapper); var currentDropdown = currentSelector.querySelector(self.config.selectors.dropdown); // const currentUnderline = currentSelector.querySelector(self.config.selectors.underline); var newIndex; for (var i = 0; i < currentDropdown.options.length; i += 1) { if (currentDropdown.options[i].value === currentTabID) { newIndex = i; } } // self.updateTabNav(currentTab, currentUnderline, newIndex); self.updateTabNav(currentTab, newIndex); self.updateDropdown(currentDropdown, newIndex); _get(_getPrototypeOf(DSMPTabsTabDropdown.prototype), "tabPanelChange", this).call(this, currentTabID); } }, { key: "tabDropdownChange", value: function tabDropdownChange(ev) { var self = this; var currDropdown = ev.currentTarget; var currentIndex = currDropdown.options.selectedIndex; var currentTabID = currDropdown.value; var currentNavItem = document.querySelector("[".concat(self.config.data, "='").concat(currentTabID, "']")); self.updateDropdown(currDropdown, currentIndex); self.updateTabNav(currentNavItem); _get(_getPrototypeOf(DSMPTabsTabDropdown.prototype), "tabPanelChange", this).call(this, currentTabID); } }, { key: "updateDropdown", value: function updateDropdown(currentDrop, newDropIndex) { var self = this; var currDropdown = currentDrop; var currentIndex = newDropIndex; for (var i = 0; i < currDropdown.options.length; i += 1) { currDropdown.options[i].removeAttribute('selected'); } currDropdown.options[currentIndex].setAttribute('selected', 'selected'); currDropdown.options.selectedIndex = currentIndex; } // updateTabNav(currTab, tabUnderline, currTabIndex) { }, { key: "updateTabNav", value: function updateTabNav(currTab, currTabIndex) { var self = this; var currentTab = currTab; self.activeNav = currTab; var currentSelector = currentTab.closest(self.config.wrapper); var elem = currentSelector.querySelectorAll(self.config.selectors.nav); _get(_getPrototypeOf(DSMPTabsTabDropdown.prototype), "clearActiveClass", this).call(this, elem, 'nav'); // super.setActiveClass(currentTab, tabUnderline, currTabIndex, 'nav'); _get(_getPrototypeOf(DSMPTabsTabDropdown.prototype), "setActiveClass", this).call(this, currentTab, 'nav'); } }, { key: "unbindTabsDropEvents", value: function unbindTabsDropEvents() { var self = this; var dropdowns = self.itemsDropdown; var elem = self.items; elem.forEach(function (tab) { tab.removeEventListener('click', self.tabNavClick); }); dropdowns.forEach(function (dropdown) { dropdown.removeEventListener('change', self.tabDropdownChange); }); } }]); }(_DSMPTabsClass__WEBPACK_IMPORTED_MODULE_1__["default"]); /* harmony default export */ __webpack_exports__["default"] = (DSMPTabsTabDropdown); /***/ }), /***/ "./library/tabs-accordions/DSMPTabsClass.js": /*!**************************************************!*\ !*** ./library/tabs-accordions/DSMPTabsClass.js ***! \**************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _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, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var DSMPTabsClass = /*#__PURE__*/function () { function DSMPTabsClass() { _classCallCheck(this, DSMPTabsClass); this.eventsListeners = {}; this.currentIndex = 0; this.activeNav = null; this.activePanel = null; } return _createClass(DSMPTabsClass, [{ key: "bindFunctions", value: function bindFunctions() { this.tabNavClick = this.tabNavClick.bind(this); } }, { key: "bindTabNavEvent", value: function bindTabNavEvent() { var self = this; var elem = self.items; elem.forEach(function (tab) { tab.addEventListener('click', self.tabNavClick, { passive: true }); }); } }, { key: "unbindTabNavEvent", value: function unbindTabNavEvent() { var self = this; var elem = self.items; elem.forEach(function (tab) { tab.removeEventListener('click', self.tabNavClick); }); } }, { key: "tabNavClick", value: function tabNavClick(ev) { var self = this; var currentTab = ev.currentTarget; self.activeNav = ev.currentTarget; var currentSelector = currentTab.closest(self.config.wrapper); var elem = currentSelector.querySelectorAll(self.config.selectors.nav); var currentTabID = self.getNavTabID(currentTab); self.clearActiveClass(elem, 'nav'); self.setActiveClass(currentTab, 'nav'); self.tabPanelChange(currentTabID); } }, { key: "tabPanelChange", value: function tabPanelChange(index) { var self = this; if (typeof index === 'undefined') { return; } var currentPanelID = "".concat(self.config.data, "-").concat(index); var currentPanel = document.querySelector("#".concat(currentPanelID)); self.activePanel = currentPanel; var currentPanelHolder = currentPanel.closest(self.config.wrapper); var elem = currentPanelHolder.querySelectorAll(self.config.selectors.panel); if (typeof currentPanel === 'undefined') { return; } self.currentIndex = index; self.clearActiveClass(elem, 'panel'); self.setActiveClass(currentPanel, 'panel'); self.emit('tabsChange'); } }, { key: "getNavTabID", value: function getNavTabID(index) { var self = this; var dataID = index.getAttribute(self.config.data); return dataID; } }, { key: "clearActiveClass", value: function clearActiveClass(elem, section) { var self = this; elem.forEach(function (tab) { tab.classList.remove(self.config.classes.active); if (section === 'panel') { tab.setAttribute('aria-hidden', true); } if (section === 'nav') { tab.setAttribute('aria-selected', false); } }); } }, { key: "setActiveClass", value: function setActiveClass(elem, section) { var self = this; elem.classList.add(self.config.classes.active); if (section === 'panel') { elem.setAttribute('aria-hidden', false); } if (section === 'nav') { elem.setAttribute('aria-selected', true); } } }, { key: "setFirstActive", value: function setFirstActive() { var i = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var self = this; var elems = self.items; var currentTab = elems[i]; var currentSelector = currentTab.closest(self.config.wrapper); var elem = currentSelector.querySelectorAll(self.config.selectors.nav); var currentTabID = self.getNavTabID(currentTab); self.clearActiveClass(elem, 'nav'); self.setActiveClass(currentTab, 'nav'); self.tabPanelChange(currentTabID); } }, { key: "on", value: function on(events, callback) { var self = this; if (typeof callback !== 'function') return; events.split(' ').forEach(function (event, i) { if (!self.eventsListeners[event]) self.eventsListeners[event] = []; self.eventsListeners[event].push(callback); }); } }, { key: "off", value: function off(events, handler) { var self = this; if (!self.eventsListeners) return; events.split(' ').forEach(function (event) { if (typeof handler === 'undefined') { self.eventsListeners[event] = []; } else if (self.eventsListeners[event]) { self.eventsListeners[event].forEach(function (eventHandler, index) { if (eventHandler === handler) { self.eventsListeners[event].splice(index, 1); } }); } }); } }, { key: "emit", value: function emit() { var self = this; if (!self.eventsListeners) return self; var events; var data; var context; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } if (typeof args[0] === 'string' || Array.isArray(args[0])) { events = args[0]; data = args.slice(1, args.length); context = self; } else { events = args[0].events; data = args[0].data; context = args[0].context || self; } //console.log(events, data, context); data.unshift(context); var eventsArray = Array.isArray(events) ? events : events.split(' '); eventsArray.forEach(function (event) { if (self.eventsListeners && self.eventsListeners[event]) { self.eventsListeners[event].forEach(function (eventHandler) { eventHandler.apply(context, data); }); } }); } }]); }(); /* harmony default export */ __webpack_exports__["default"] = (DSMPTabsClass); /***/ }), /***/ "./library/tabs-accordions/DSMPTabsToAccordionMobile.js": /*!**************************************************************!*\ !*** ./library/tabs-accordions/DSMPTabsToAccordionMobile.js ***! \**************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony import */ var _DSMPAccordions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./DSMPAccordions */ "./library/tabs-accordions/DSMPAccordions.js"); /* harmony import */ var _DSMPTabs_tab__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./DSMPTabs-tab */ "./library/tabs-accordions/DSMPTabs-tab.js"); /* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/utils */ "./utils/utils.js"); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _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, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var DSMPTabToAccordionMobile = /*#__PURE__*/function () { function DSMPTabToAccordionMobile(selector) { _classCallCheck(this, DSMPTabToAccordionMobile); this.tabaccID = '#js-tab-acc'; this.tabaccSelector = '.js-tabs-to-acc-wrapper'; this.tabaccItems = document.querySelectorAll(this.tabaccSelector); this.tabOptions = { wrapper: '.js-tabs-wrapper', selectors: { nav: '.js-tabs-nav-item', panel: '.js-tabs-panel' // underline: '.js-tabs-nav-underline', } }; this.accordionOptions = { selectors: { item: '.js-tabs-panel', trigger: '.js-tabs-label', content: '.js-ta-content' }, opt: { close: true, expand: true }, classes: { display: 'flex' }, animation: { content: true } }; this.isMobile = false; this.isDesktop = false; this.accordionInstance; this.tabInstance; if (typeof selector !== "undefined") { this.tabaccID = selector; } this.init(); } return _createClass(DSMPTabToAccordionMobile, [{ key: "init", value: function init() { var self = this; var currentWidth = window.innerWidth; currentWidth < 1025 ? this.isMobile = true : this.isDesktop = true; if (self.isMobile) self.buildAccordion(); if (self.isDesktop) self.buildTab(); window.addEventListener('resize', function () { self.throttleScroll(); }); this.throttleScroll = (0,_utils_utils__WEBPACK_IMPORTED_MODULE_2__.u_throttled)(function () { self.buildTabAccordion(); }, 150); self.buildTabAccordion(); } }, { key: "buildTabAccordion", value: function buildTabAccordion() { var self = this; var newWidth = window.innerWidth; if (newWidth < 1025) { if (!self.isMobile) { if (typeof self.tabInstance !== "undefined") { self.tabInstance.unbindTabNavEvent(); self.tabInstance = undefined; } self.buildAccordion(); self.isDesktop = false; self.isMobile = true; } } else { if (!self.isDesktop) { if (typeof self.accordionInstance !== "undefined") { self.accordionInstance.accordionUnbindEvents(); self.accordionInstance = undefined; } self.buildTab(); self.isMobile = false; self.isDesktop = true; } } } }, { key: "buildAccordion", value: function buildAccordion() { this.accordionInstance = new _DSMPAccordions__WEBPACK_IMPORTED_MODULE_0__["default"](this.tabaccID, this.accordionOptions); } }, { key: "buildTab", value: function buildTab() { this.tabOptions.wrapper = this.tabaccID; this.tabInstance = new _DSMPTabs_tab__WEBPACK_IMPORTED_MODULE_1__["default"](this.tabOptions); this.tabInstance.setFirstActive(); } }]); }(); /* harmony default export */ __webpack_exports__["default"] = (DSMPTabToAccordionMobile); /***/ }), /***/ "./library/tabs-accordions/tab-accordion.js": /*!**************************************************!*\ !*** ./library/tabs-accordions/tab-accordion.js ***! \**************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _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, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /** * TODO: * DO NOT USE THIS, STILL IN DEVELOPMENT */ var TabAccordion = /*#__PURE__*/function () { function TabAccordion() { _classCallCheck(this, TabAccordion); this.config = { selector: '.js-tabs-panel', navigation: '.js-tabs-nav', tabs: { container: '.l-tabs__panel' }, accordion: { label: '.l-tabs__label', content: '.l-tabs__content' }, nav: { item: '.c-tabs-nav__link' } }; this.selector = "".concat(this.config.navigation, " ").concat(this.config.nav.item); // console.log(this.selector); this.items = document.querySelectorAll(this.selector); //console.log(this.items); this.keys = { end: 35, home: 36, left: 37, up: 38, right: 39, down: 40, delete: 46, enter: 13, space: 32 }; this.keysDirection = { 37: -1, 38: -1, 39: 1, 40: 1 }; //console.log('tab-accordion'); this.init(); } return _createClass(TabAccordion, [{ key: "init", value: function init() {} }]); }(); /* harmony default export */ __webpack_exports__["default"] = (TabAccordion); /***/ }), /***/ "./library/tabs-accordions/tab-single.js": /*!***********************************************!*\ !*** ./library/tabs-accordions/tab-single.js ***! \***********************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony import */ var _animations_scroll_to__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../animations/scroll-to */ "./library/animations/scroll-to.js"); /* harmony import */ var _animations_easings_es6__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../animations/easings-es6 */ "./library/animations/easings-es6.js"); /* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/utils */ "./utils/utils.js"); /* harmony import */ var _utils_u_slide_up_down__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/u_slide-up-down */ "./utils/u_slide-up-down.js"); /* harmony import */ var _utils_u_el_in_viewport_detect__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/u_el-in-viewport-detect */ "./utils/u_el-in-viewport-detect.js"); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _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."); } function _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); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _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; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _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, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /** * TODO: * DO NOT USE THIS, STILL IN DEVELOPMENT */ var DSMPTab = /*#__PURE__*/function () { function DSMPTab(aos) { _classCallCheck(this, DSMPTab); this.scroll = {}; this.selector = '.js-tabs-nav .c-tabs-nav__link'; this.mobileSelector = '.js-tabs-panel .l-tabs__label'; this.items = document.querySelectorAll(this.selector); this.itemsMobile = document.querySelectorAll(this.mobileSelector); this.aos = aos; this.init(); } return _createClass(DSMPTab, [{ key: "init", value: function init() { var self = this; self.bindChangeTab = this.changeTab.bind(this); self.bindChangeSlide = this.changeSlide.bind(this); self.bindScrollAccordion = this.scrollAccordion.bind(this); self.bindResizeAccordion = this.resizeAccordion.bind(this); _toConsumableArray(self.items).forEach(function (tab) { tab.addEventListener('click', self.bindChangeTab); }); _toConsumableArray(self.itemsMobile).forEach(function (label) { label.addEventListener('click', self.bindChangeSlide); }); window.addEventListener('resize', function () { throtleResizeAccordion(); }); var throtleResizeAccordion = (0,_utils_utils__WEBPACK_IMPORTED_MODULE_2__.u_throttled)(function () { self.bindResizeAccordion(); }, 250); var throtleAccordionScroll = (0,_utils_utils__WEBPACK_IMPORTED_MODULE_2__.u_throttled)(function () { self.bindScrollAccordion(); }, 150); self.bindResizeAccordion(); } }, { key: "changeTab", value: function changeTab(ev) { var self = this; ev.preventDefault(); var currentItemClicked = ev.currentTarget; var tabItem = currentItemClicked.getAttribute('aria-controls'); var currentItem = currentItemClicked.closest('.c-tabs-nav__item'); var currentList = currentItemClicked.closest('.js-tabs-nav'); var items = currentList.querySelectorAll('.c-tabs-nav__link'); if (!currentItemClicked.classList.contains('is-active')) { items.forEach(function (item, i) { item.classList.remove('is-active'); item.setAttribute('aria-selected', 'false'); }); currentItemClicked.classList.add('is-active'); currentItemClicked.setAttribute('aria-selected', 'true'); } var tabsPanel = document.querySelectorAll('.js-tabs-panel .l-tabs__panel'); tabsPanel.forEach(function (tabs, i) { tabs.classList.remove('is-active', 'is-current'); tabs.setAttribute('aria-hidden', 'true'); }); tabsPanel.forEach(function (tabbed, i) { var currentTab = tabbed.getAttribute('id'); if (currentTab === tabItem) { tabbed.classList.add('is-active', 'is-current'); tabbed.setAttribute('aria-hidden', 'false'); } }); } }, { key: "changeSlide", value: function changeSlide(ev) { var self = this; ev.preventDefault(); var currentItemClicked = ev.currentTarget; var currentItem = currentItemClicked.closest('.l-tabs__panel'); var currentContent = currentItem.querySelector('.l-tabs__content'); var elems = document.querySelectorAll('.js-tabs-panel .l-tabs__panel'); elems.forEach(function (label, i) { if (label === currentItem) { if (!currentItem.classList.contains('is-current')) { currentItem.classList.add('is-current'); } } else { label.classList.remove('is-current'); } }); if (currentItem.classList.contains('is-active')) { var scrollCurrentContent = currentContent.offsetTop; var currentScrollPos = window.pageYOffset || document.documentElement.scrollTop; var scrollTo = currentContent.offsetTop - 99; if (currentScrollPos > scrollCurrentContent - 50) { (0,_animations_scroll_to__WEBPACK_IMPORTED_MODULE_0__.scrollToUtil)({ to: scrollTo, duration: 200, easing: _animations_easings_es6__WEBPACK_IMPORTED_MODULE_1__.easeInOutQuart }); // window.scrollTo( { // top: scrollTo // }) } (0,_utils_u_slide_up_down__WEBPACK_IMPORTED_MODULE_3__.u_slideUp)(currentContent); currentItem.classList.remove('is-active'); currentItem.classList.remove('is-current'); } else { (0,_utils_u_slide_up_down__WEBPACK_IMPORTED_MODULE_3__.u_slideDown)(currentContent, { display: 'flex' }); currentItem.classList.add('is-active'); } } }, { key: "scrollAccordion", value: function scrollAccordion() { var self = this; var currentWidth = window.innerWidth; var isCurrent = []; var elems = document.querySelectorAll('.js-tabs-panel .l-tabs__content'); elems.forEach(function (label, i) { var elemItem = label.closest('.l-tabs__panel'); if (elemItem.classList.contains('is-active')) { if ((0,_utils_u_el_in_viewport_detect__WEBPACK_IMPORTED_MODULE_4__.u_isElementIsInView)(label)) { isCurrent.push(i); } } }); var currentLength = isCurrent.length; if (currentLength > 0) { elems.forEach(function (item, j) { var elemItem = item.closest('.l-tabs__panel'); if (isCurrent[0] === j) { if (!elemItem.classList.contains('is-current')) { elemItem.classList.add('is-current'); } } else { elemItem.classList.remove('is-current'); } }); } } }, { key: "resizeAccordion", value: function resizeAccordion() { var self = this; var currentWidth = window.innerWidth; if (currentWidth > 1024) { var elems = document.querySelectorAll('.js-tabs-panel .l-tabs__content'); var current = 0; elems.forEach(function (label, i) { var elemItem = label.closest('.l-tabs__panel'); if (elemItem.classList.contains('is-current')) { current = i; } elemItem.classList.remove('is-active'); label.style.display = ''; }); if (elems.length > 0) { elems[current].closest('.l-tabs__panel').classList.add('is-active'); } var tabsElem = document.querySelectorAll('.js-tabs-nav .c-tabs-nav__link'); tabsElem.forEach(function (tab, j) { tab.classList.remove('is-active'); }); if (tabsElem.length > 0) { tabsElem[current].classList.add('is-active'); } window.removeEventListener('scroll', self.bindScrollAccordion); } else { window.addEventListener('scroll', self.bindScrollAccordion); } } }]); }(); /* harmony default export */ __webpack_exports__["default"] = (DSMPTab); /***/ }), /***/ "./load-more/load-more-posts.js": /*!**************************************!*\ !*** ./load-more/load-more-posts.js ***! \**************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ loadMorePosts: function() { return /* binding */ loadMorePosts; } /* harmony export */ }); /* provided dependency */ var jQuery = __webpack_require__(/*! jquery */ "jquery"); function loadMorePosts() { (function ($) { function done() { var newPosts = $(".l-latest-cat-item.loaded:not(done)"); function addDelayedClass(selector, className, delay) { // Get all the elements matching the selector var elements = $(selector); // Loop through each element and add the class with a delay elements.each(function (index) { var element = $(this); setTimeout(function () { element.addClass(className); }, delay * index); }); } addDelayedClass(newPosts, "done", 110); } $('#load_more_posts').on('click', function (e) { e.preventDefault(); var button = $('#load_more_posts'); var paged = button.attr('data-paged'); var total = button.attr('data-total'); var author = button.attr('data-author'); var listSection = $('#posts_wrap'); var buttonWrapper = $('.latest-cat.lower .more-wrap'); var data = { action: 'more_blog_posts', nonce: ds.nonce, currentPage: paged, author: author }; $.ajax({ url: ds.ajax_url, data: data, type: 'POST', beforeSend: function beforeSend(xhr) { button.addClass('loading'); }, success: function success(data) { if (data) { $(listSection).append(data.posts); setTimeout(done(), 110); button.attr('data-paged', data.paged); button.removeClass('loading'); if (data.paged == total) { button.hide(); } } else { button.hide(); } } }); }); })(jQuery); } /***/ }), /***/ "./patches/tabsTabDrop.js": /*!********************************!*\ !*** ./patches/tabsTabDrop.js ***! \********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ tabsTabDrop: function() { return /* binding */ tabsTabDrop; } /* harmony export */ }); function tabsTabDrop() { var tabItems = document.querySelectorAll('.js-tabs-nav-item'); tabItems.forEach(function (item) { item.addEventListener('keydown', function (event) { // Check if the Enter key is pressed if (event.keyCode === 13) { item.click(); } }); }); var gridderListItems = document.querySelectorAll('.gridder-list.l-team__item'); gridderListItems.forEach(function (item) { item.addEventListener('keydown', function (event) { // Check if the Enter key is pressed if (event.keyCode === 13) { item.click(); } }); }); } /***/ }), /***/ "./utils/u_classlist-add-remove.js": /*!*****************************************!*\ !*** ./utils/u_classlist-add-remove.js ***! \*****************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ u_addClass: function() { return /* binding */ u_addClass; }, /* harmony export */ u_delClass: function() { return /* binding */ u_delClass; }, /* harmony export */ u_hasClass: function() { return /* binding */ u_hasClass; } /* harmony export */ }); var u_hasClass = function u_hasClass(el, cls) { if (el.className.match('(?:^|\\s)' + cls + '(?!\\S)')) { return true; } }; var u_addClass = function u_addClass(el, cls) { if (!el.className.match('(?:^|\\s)' + cls + '(?!\\S)')) { el.className += ' ' + cls; } }; var u_delClass = function u_delClass(el, cls) { el.className = el.className.replace(new RegExp('(?:^|\\s)' + cls + '(?!\\S)'), ''); }; /***/ }), /***/ "./utils/u_el-in-viewport-detect.js": /*!******************************************!*\ !*** ./utils/u_el-in-viewport-detect.js ***! \******************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ u_elementFromTop: function() { return /* binding */ u_elementFromTop; }, /* harmony export */ u_isElementIsInView: function() { return /* binding */ u_isElementIsInView; } /* harmony export */ }); /* harmony import */ var _u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./u_classlist-add-remove */ "./utils/u_classlist-add-remove.js"); /** * params: trigger element, target element class, classes to add to target element, trigger element distance from top, unit ('percent' or 'pixels') * usage: elementFromTop(elemTrigger, elemTarget, classToAdd, distanceFromTop, unit); * * http://blog.fofwebdesign.co.uk/41-add-classes-to-an-element-when-scrolled-into-viewport */ var u_elementFromTop = function u_elementFromTop(elemTrigger, elemTarget, classToAdd, distanceFromTop, unit) { var winY = window.innerHeight || document.documentElement.clientHeight, elTriggerLength = elemTrigger.length, elTargetLength, distTop, distPercent, distPixels, distUnit, elTarget, i, j; for (i = 0; i < elTriggerLength; ++i) { elTarget = document.querySelectorAll(elemTarget); elTargetLength = elTarget.length; distTop = elemTrigger[i].getBoundingClientRect().top; distPercent = Math.round(distTop / winY * 100); distPixels = Math.round(distTop); distUnit = unit == 'percent' ? distPercent : distPixels; if (distUnit <= distanceFromTop) { if (!(0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_hasClass)(elemTrigger[i], elemTarget)) { for (j = 0; j < elTargetLength; ++j) { if (!(0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_hasClass)(elTarget[j], classToAdd)) { (0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_addClass)(elTarget[j], classToAdd); } } } else { if (!(0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_hasClass)(elemTrigger[i], classToAdd)) { (0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_addClass)(elemTrigger[i], classToAdd); } } } else { (0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_delClass)(elemTrigger[i], classToAdd); if (!(0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_hasClass)(elemTrigger[i], elemTarget)) { for (j = 0; j < elTargetLength; ++j) { (0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_delClass)(elTarget[j], classToAdd); } } } } }; var u_isElementIsInView = function u_isElementIsInView(el) { var scroll = window.scrollY || window.pageYOffset; var boundsTop = el.getBoundingClientRect().top + scroll; var viewport = { top: scroll, bottom: scroll + window.innerHeight }; var bounds = { top: boundsTop, bottom: boundsTop + el.clientHeight }; return bounds.bottom >= viewport.top && bounds.bottom <= viewport.bottom || bounds.top <= viewport.bottom && bounds.top >= viewport.top; }; /***/ }), /***/ "./utils/u_fade-in-out.js": /*!********************************!*\ !*** ./utils/u_fade-in-out.js ***! \********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ u_fadeIn: function() { return /* binding */ u_fadeIn; }, /* harmony export */ u_fadeOut: function() { return /* binding */ u_fadeOut; } /* harmony export */ }); /** * https://www.ilearnjavascript.com/plainjs-fadein-fadeout/ * * TODO: there are better fadeIn fadeOut scripts with animation easings */ // export const fadeIn = (el, displayStyle = 'block', smooth = true) => { // el.style.opacity = 0; // el.style.display = displayStyle; // if (smooth) { // let opacity = 0; // let request; // // const animation = () => { // el.style.opacity = opacity += 0.04; // if (opacity >= 1) { // opacity = 1; // cancelAnimationFrame(request); // } // }; // // const rAf = () => { // request = requestAnimationFrame(rAf); // animation(); // }; // rAf(); // // } else { // el.style.opacity = 1; // } // }; // // export const fadeOut = (el, displayStyle = 'none', smooth = true ) => { // if (smooth) { // let opacity = el.style.opacity; // let request; // // const animation = () => { // el.style.opacity = opacity -= 0.04; // if (opacity <= 0) { // opacity = 0; // el.style.display = displayStyle; // cancelAnimationFrame(request); // } // }; // // const rAf = () => { // request = requestAnimationFrame(rAf); // animation(); // }; // rAf(); // // } else { // el.style.opacity = 0; // } // }; var defaults = { duration: 100, complete: function complete() {} }; var animateFade = function animateFade(options) { var start = new Date(); var id = setInterval(function () { var timePassed = new Date() - start; var progress = timePassed / options.duration; if (progress > 1) { progress = 1; } options.progress = progress; var delta = options.delta(progress); options.step(delta); if (progress == 1) { clearInterval(id); if (typeof options.complete === "function") { options.complete(); } } }, options.delay || 10); }; var u_fadeIn = function u_fadeIn(element) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (typeof options.duration === "undefined") { options.duration = defaults.duration; } var to = 0; animateFade({ duration: options.duration, delta: function delta(progress) { progress = this.progress; return easings.swing(progress); }, complete: options.complete, step: function step(delta) { element.style.opacity = to + delta; } }); }; var u_fadeOut = function u_fadeOut(element) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (typeof options.duration === "undefined") { options.duration = defaults.duration; } var to = 1; animateFade({ duration: options.duration, delta: function delta(progress) { progress = this.progress; return easings.swing(progress); }, complete: options.complete, step: function step(delta) { element.style.opacity = to - delta; } }); }; var easings = { linear: function linear(progress) { return progress; }, quadratic: function quadratic(progress) { return Math.pow(progress, 2); }, swing: function swing(progress) { return 0.5 - Math.cos(progress * Math.PI) / 2; }, circ: function circ(progress) { return 1 - Math.sin(Math.acos(progress)); }, back: function back(progress, x) { return Math.pow(progress, 2) * ((x + 1) * progress - x); }, bounce: function bounce(progress) { for (var a = 0, b = 1, result; 1; a += b, b /= 2) { if (progress >= (7 - 4 * a) / 11) { return -Math.pow((11 - 6 * a - 11 * progress) / 4, 2) + Math.pow(b, 2); } } }, elastic: function elastic(progress, x) { return Math.pow(2, 10 * (progress - 1)) * Math.cos(20 * Math.PI * x / 3 * progress); } }; /***/ }), /***/ "./utils/u_is-touch-device.js": /*!************************************!*\ !*** ./utils/u_is-touch-device.js ***! \************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ u_addTouchToHtml: function() { return /* binding */ u_addTouchToHtml; }, /* harmony export */ u_isTouchDevice: function() { return /* binding */ u_isTouchDevice; } /* harmony export */ }); /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./utils/utils.js"); /** * standalone function that checks whether device is touch or not * call it within anything, * @returns {boolean} */ var u_isTouchDevice = function u_isTouchDevice() { return !!(typeof window !== 'undefined' && ('ontouchstart' in window || window.DocumentTouch && typeof document !== 'undefined' && document instanceof window.DocumentTouch)) || !!(typeof navigator !== 'undefined' && (navigator.maxTouchPoints || navigator.msMaxTouchPoints)); }; /** * function that calls isTouchDevice function, */ var isTouchHtmlUtil = function isTouchHtmlUtil() { var touch = u_isTouchDevice(); var html = document.getElementsByTagName('html')[0]; // if true, add touch-device to html, otherwise no-touch-device if (touch) { html.classList.remove('no-touch-device'); html.classList.add('touch-device'); } else { html.classList.remove('touch-device'); html.classList.add('no-touch-device'); } }; /** * exported function addTouchToHtmlUtil * imported into index.js and called when DOMReady, * contains 'resize' event listener to check for * device orientation, or changes * is throttled, to prevent continuously triggering * (min 300ms so chrome dev tool can catch it) */ var u_addTouchToHtml = function u_addTouchToHtml() { isTouchHtmlUtil(); // throttle the function var throttleIsTouch = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.u_throttled)(function () { isTouchHtmlUtil(); }, 300); // bind resize event window.addEventListener('resize', function () { throttleIsTouch(); }); }; /***/ }), /***/ "./utils/u_object_extend.js": /*!**********************************!*\ !*** ./utils/u_object_extend.js ***! \**********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ u_extend: function() { return /* binding */ u_extend; }, /* harmony export */ u_extendObject: function() { return /* binding */ u_extendObject; }, /* harmony export */ u_mergeDeep: function() { return /* binding */ u_mergeDeep; } /* harmony export */ }); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } var u_extendObject = function u_extendObject(destination, source) { for (var property in source) { if (source[property] && source[property].constructor && source[property].constructor === Object) { destination[property] = destination[property] || {}; u_extendObject(destination[property], source[property]); } else { destination[property] = source[property]; } } return destination; }; var u_extend = function u_extend(defaults, options) { var extendedOptions = {}; for (var key in defaults) { extendedOptions[key] = options[key] || defaults[key]; } return extendedOptions; }; var u_mergeDeep = function u_mergeDeep(target, source) { var isObject = function isObject(obj) { return obj && _typeof(obj) === 'object'; }; if (!isObject(target) || !isObject(source)) { return source; } Object.keys(source).forEach(function (key) { var targetValue = target[key]; var sourceValue = source[key]; if (Array.isArray(targetValue) && Array.isArray(sourceValue)) { target[key] = targetValue.concat(sourceValue); } else if (isObject(targetValue) && isObject(sourceValue)) { target[key] = u_mergeDeep(Object.assign({}, targetValue), sourceValue); } else { target[key] = sourceValue; } }); return target; }; /***/ }), /***/ "./utils/u_slide-up-down.js": /*!**********************************!*\ !*** ./utils/u_slide-up-down.js ***! \**********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ u_slideDown: function() { return /* binding */ u_slideDown; }, /* harmony export */ u_slideToggle: function() { return /* binding */ u_slideToggle; }, /* harmony export */ u_slideUp: function() { return /* binding */ u_slideUp; } /* harmony export */ }); /* harmony import */ var _u_object_extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./u_object_extend */ "./utils/u_object_extend.js"); /* harmony import */ var _u_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./u_types */ "./utils/u_types.js"); /** * https://github.com/janrembold/es6-slide-up-down * * usage with easings * */ var defaults = { duration: 250, easing: function easing(currentTime, startValue, diffValue, dureation) { return -diffValue * (currentTime /= dureation) * (currentTime - 2) + startValue; }, display: 'block' }; var directions = { OPEN: 1, CLOSE: 2 }; var u_slideUp = function u_slideUp(element) { var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if ((0,_u_types__WEBPACK_IMPORTED_MODULE_1__.u_isInteger)(args)) { args = { duration: args }; } var options = (0,_u_object_extend__WEBPACK_IMPORTED_MODULE_0__.u_extend)(defaults, args); var displayType = options.display; options.direction = directions.CLOSE; options.to = 0; options.startingHeight = element.scrollHeight; options.distanceHeight = -options.startingHeight; setElementAnimationStyles(element, displayType); window.requestAnimationFrame(function (timestamp) { return animate(element, options, timestamp); }); }; var u_slideDown = function u_slideDown(element) { var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if ((0,_u_types__WEBPACK_IMPORTED_MODULE_1__.u_isInteger)(args)) { args = { duration: args }; } element.style.height = '0px'; var options = (0,_u_object_extend__WEBPACK_IMPORTED_MODULE_0__.u_extend)(defaults, args); var displayType = options.display; setElementAnimationStyles(element, displayType); options.direction = directions.OPEN; options.to = element.scrollHeight; options.startingHeight = 0; options.distanceHeight = options.to; window.requestAnimationFrame(function (timestamp) { return animate(element, options, timestamp); }); }; var animate = function animate(element, options, now) { if (!options.startTime) { options.startTime = now; } var currentTime = now - options.startTime; var animationContinue = currentTime < options.duration; var newHeight = options.easing(currentTime, options.startingHeight, options.distanceHeight, options.duration); if (animationContinue) { element.style.height = "".concat(newHeight.toFixed(2), "px"); window.requestAnimationFrame(function (timestamp) { return animate(element, options, timestamp); }); } else { if (options.direction === directions.CLOSE) { element.style.display = 'none'; } if (options.direction === directions.OPEN) { element.style.display = options.display === 'flex' ? 'flex' : 'block'; } removeElementAnimationStyles(element); } }; var setElementAnimationStyles = function setElementAnimationStyles(element) { var displayType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'block'; element.style.display = displayType === 'flex' ? 'flex' : 'block'; element.style.overflow = 'hidden'; element.style.marginTop = '0'; element.style.marginBottom = '0'; element.style.paddingTop = '0'; element.style.paddingBottom = '0'; }; var removeElementAnimationStyles = function removeElementAnimationStyles(element) { element.style.height = null; element.style.overflow = null; element.style.marginTop = null; element.style.marginBottom = null; element.style.paddingTop = null; element.style.paddingBottom = null; }; var u_slideToggle = function u_slideToggle(element) { var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (window.getComputedStyle(element).display === 'none') { return u_slideDown(element, args); } else { return u_slideUp(element, args); } }; /***/ }), /***/ "./utils/u_types.js": /*!**************************!*\ !*** ./utils/u_types.js ***! \**************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ u_isInteger: function() { return /* binding */ u_isInteger; }, /* harmony export */ u_isObject: function() { return /* binding */ u_isObject; }, /* harmony export */ u_parseBool: function() { return /* binding */ u_parseBool; } /* harmony export */ }); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } var u_isInteger = function u_isInteger(value) { if (Number.isInteger) { return Number.isInteger(value); } else { return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; } }; var u_isObject = function u_isObject(o) { return _typeof(o) === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object'; }; var u_parseBool = function u_parseBool(str) { // console.log(typeof str); // strict: JSON.parse(str) if (str == null) return false; if (typeof str === 'boolean') { return str === true; } if (typeof str === 'string') { if (str == "") return false; str = str.replace(/^\s+|\s+$/g, ''); if (str.toLowerCase() == 'true' || str.toLowerCase() == 'yes') return true; str = str.replace(/,/g, '.'); str = str.replace(/^\s*\-\s*/g, '-'); } // var isNum = string.match(/^[0-9]+$/) != null; // var isNum = /^\d+$/.test(str); if (!isNaN(str)) return parseFloat(str) != 0; return false; }; /***/ }), /***/ "./utils/utils.js": /*!************************!*\ !*** ./utils/utils.js ***! \************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ u_debounced: function() { return /* binding */ u_debounced; }, /* harmony export */ u_throttled: function() { return /* binding */ u_throttled; } /* harmony export */ }); var _this = undefined; var u_debounced = function u_debounced(func, delay, immediate) { var timerId; return function () { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } var boundFunc = func.bind.apply(func, [_this].concat(args)); clearTimeout(timerId); if (immediate && !timerId) { boundFunc(); } var calleeFunc = immediate ? function () { timerId = null; } : boundFunc; timerId = setTimeout(calleeFunc, delay); }; }; var u_throttled = function u_throttled(func, delay, immediate) { var timerId; return function () { for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } var boundFunc = func.bind.apply(func, [_this].concat(args)); if (timerId) { return; } if (immediate && !timerId) { boundFunc(); } timerId = setTimeout(function () { if (!immediate) { boundFunc(); } timerId = null; }, delay); }; }; /***/ }), /***/ "./visuals/scroll-animations.js": /*!**************************************!*\ !*** ./visuals/scroll-animations.js ***! \**************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ scrollAnimations: function() { return /* binding */ scrollAnimations; } /* harmony export */ }); // import ScrollOut from "scroll-out"; // // import Splitting from "splitting"; function scrollAnimations() { // Function to handle the intersection events function handleIntersect(entries, observer) { entries.forEach(function (entry) { if (entry.isIntersecting) { entry.target.dataset.scroll = 'in'; if (entry.target.dataset.once === 'true') { observer.unobserve(entry.target); } } else { entry.target.dataset.scroll = 'out'; } }); } // Helper function to create an observer with specific options function createObserver(options, selector, once) { var observer = new IntersectionObserver(handleIntersect, options); document.querySelectorAll(selector).forEach(function (element) { element.dataset.once = once.toString(); observer.observe(element); }); } // Options for different targets var options1 = { threshold: 0.1, root: null // Use the viewport as the root }; var options2 = { rootMargin: '0px 0px -600px 0px' // Trigger 600px before element is in view }; var options3 = { threshold: 0, root: null }; // Observers for different targets createObserver(options1, ".in-view, .a-fade-trans, .s-text-box, .s-blog-section, .l-sign-up, .form-section__inner, .s-analysis, .s-services-custom, .services .l-dcbl, .s-team .bg-text", true); createObserver(options2, ".in-cs", true); createObserver(options3, ".in-view-r", false); } /***/ }), /***/ "./visuals/video-hover.js": /*!********************************!*\ !*** ./visuals/video-hover.js ***! \********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ videoHover: function() { return /* binding */ videoHover; } /* harmony export */ }); function videoHover() { window.onload = function () { var vids = document.getElementsByClassName('services-media'); // Loop over the selected elements and add event listeners var _loop = function _loop() { var vidsItem = vids[i].querySelector('video'); vids[i].addEventListener('mouseover', function (e) { vidsItem.play(); }); vids[i].addEventListener('mouseout', function (e) { vidsItem.pause(); }); }; for (var i = 0; i < vids.length; i++) { _loop(); } }; } /***/ }), /***/ "jquery": /*!*************************!*\ !*** external "jQuery" ***! \*************************/ /***/ (function(module) { module.exports = jQuery; /***/ }) /******/ }); /************************************************************************/ /******/ // 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) { /******/ if (cachedModule.error !== undefined) throw cachedModule.error; /******/ 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 /******/ try { /******/ var execOptions = { id: moduleId, module: module, factory: __webpack_modules__[moduleId], require: __webpack_require__ }; /******/ __webpack_require__.i.forEach(function(handler) { handler(execOptions); }); /******/ module = execOptions.module; /******/ execOptions.factory.call(module.exports, module, module.exports, execOptions.require); /******/ } catch(e) { /******/ module.error = e; /******/ throw e; /******/ } /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = __webpack_modules__; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = __webpack_module_cache__; /******/ /******/ // expose the module execution interceptor /******/ __webpack_require__.i = []; /******/ /************************************************************************/ /******/ /* 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/get javascript update chunk filename */ /******/ !function() { /******/ // This function allow to reference all chunks /******/ __webpack_require__.hu = function(chunkId) { /******/ // return url for filenames based on template /******/ return "" + chunkId + "." + __webpack_require__.h() + ".hot-update.js"; /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/get update manifest filename */ /******/ !function() { /******/ __webpack_require__.hmrF = function() { return "app." + __webpack_require__.h() + ".hot-update.json"; }; /******/ }(); /******/ /******/ /* webpack/runtime/getFullHash */ /******/ !function() { /******/ __webpack_require__.h = function() { return "b9bbc6303f71f232fb77"; } /******/ }(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ !function() { /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } /******/ }(); /******/ /******/ /* webpack/runtime/load script */ /******/ !function() { /******/ var inProgress = {}; /******/ // data-webpack is not used as build has no uniqueName /******/ // loadScript function to load a script via script tag /******/ __webpack_require__.l = function(url, done, key, chunkId) { /******/ if(inProgress[url]) { inProgress[url].push(done); return; } /******/ var script, needAttach; /******/ if(key !== undefined) { /******/ var scripts = document.getElementsByTagName("script"); /******/ for(var i = 0; i < scripts.length; i++) { /******/ var s = scripts[i]; /******/ if(s.getAttribute("src") == url) { script = s; break; } /******/ } /******/ } /******/ if(!script) { /******/ needAttach = true; /******/ script = document.createElement('script'); /******/ /******/ script.charset = 'utf-8'; /******/ script.timeout = 120; /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } /******/ /******/ /******/ script.src = url; /******/ } /******/ inProgress[url] = [done]; /******/ var onScriptComplete = function(prev, event) { /******/ // avoid mem leaks in IE. /******/ script.onerror = script.onload = null; /******/ clearTimeout(timeout); /******/ var doneFns = inProgress[url]; /******/ delete inProgress[url]; /******/ script.parentNode && script.parentNode.removeChild(script); /******/ doneFns && doneFns.forEach(function(fn) { return fn(event); }); /******/ if(prev) return prev(event); /******/ } /******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); /******/ script.onerror = onScriptComplete.bind(null, script.onerror); /******/ script.onload = onScriptComplete.bind(null, script.onload); /******/ needAttach && document.head.appendChild(script); /******/ }; /******/ }(); /******/ /******/ /* 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 }); /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/hot module replacement */ /******/ !function() { /******/ var currentModuleData = {}; /******/ var installedModules = __webpack_require__.c; /******/ /******/ // module and require creation /******/ var currentChildModule; /******/ var currentParents = []; /******/ /******/ // status /******/ var registeredStatusHandlers = []; /******/ var currentStatus = "idle"; /******/ /******/ // while downloading /******/ var blockingPromises = 0; /******/ var blockingPromisesWaiting = []; /******/ /******/ // The update info /******/ var currentUpdateApplyHandlers; /******/ var queuedInvalidatedModules; /******/ /******/ __webpack_require__.hmrD = currentModuleData; /******/ /******/ __webpack_require__.i.push(function (options) { /******/ var module = options.module; /******/ var require = createRequire(options.require, options.id); /******/ module.hot = createModuleHotObject(options.id, module); /******/ module.parents = currentParents; /******/ module.children = []; /******/ currentParents = []; /******/ options.require = require; /******/ }); /******/ /******/ __webpack_require__.hmrC = {}; /******/ __webpack_require__.hmrI = {}; /******/ /******/ function createRequire(require, moduleId) { /******/ var me = installedModules[moduleId]; /******/ if (!me) return require; /******/ var fn = function (request) { /******/ if (me.hot.active) { /******/ if (installedModules[request]) { /******/ var parents = installedModules[request].parents; /******/ if (parents.indexOf(moduleId) === -1) { /******/ parents.push(moduleId); /******/ } /******/ } else { /******/ currentParents = [moduleId]; /******/ currentChildModule = request; /******/ } /******/ if (me.children.indexOf(request) === -1) { /******/ me.children.push(request); /******/ } /******/ } else { /******/ console.warn( /******/ "[HMR] unexpected require(" + /******/ request + /******/ ") from disposed module " + /******/ moduleId /******/ ); /******/ currentParents = []; /******/ } /******/ return require(request); /******/ }; /******/ var createPropertyDescriptor = function (name) { /******/ return { /******/ configurable: true, /******/ enumerable: true, /******/ get: function () { /******/ return require[name]; /******/ }, /******/ set: function (value) { /******/ require[name] = value; /******/ } /******/ }; /******/ }; /******/ for (var name in require) { /******/ if (Object.prototype.hasOwnProperty.call(require, name) && name !== "e") { /******/ Object.defineProperty(fn, name, createPropertyDescriptor(name)); /******/ } /******/ } /******/ fn.e = function (chunkId, fetchPriority) { /******/ return trackBlockingPromise(require.e(chunkId, fetchPriority)); /******/ }; /******/ return fn; /******/ } /******/ /******/ function createModuleHotObject(moduleId, me) { /******/ var _main = currentChildModule !== moduleId; /******/ var hot = { /******/ // private stuff /******/ _acceptedDependencies: {}, /******/ _acceptedErrorHandlers: {}, /******/ _declinedDependencies: {}, /******/ _selfAccepted: false, /******/ _selfDeclined: false, /******/ _selfInvalidated: false, /******/ _disposeHandlers: [], /******/ _main: _main, /******/ _requireSelf: function () { /******/ currentParents = me.parents.slice(); /******/ currentChildModule = _main ? undefined : moduleId; /******/ __webpack_require__(moduleId); /******/ }, /******/ /******/ // Module API /******/ active: true, /******/ accept: function (dep, callback, errorHandler) { /******/ if (dep === undefined) hot._selfAccepted = true; /******/ else if (typeof dep === "function") hot._selfAccepted = dep; /******/ else if (typeof dep === "object" && dep !== null) { /******/ for (var i = 0; i < dep.length; i++) { /******/ hot._acceptedDependencies[dep[i]] = callback || function () {}; /******/ hot._acceptedErrorHandlers[dep[i]] = errorHandler; /******/ } /******/ } else { /******/ hot._acceptedDependencies[dep] = callback || function () {}; /******/ hot._acceptedErrorHandlers[dep] = errorHandler; /******/ } /******/ }, /******/ decline: function (dep) { /******/ if (dep === undefined) hot._selfDeclined = true; /******/ else if (typeof dep === "object" && dep !== null) /******/ for (var i = 0; i < dep.length; i++) /******/ hot._declinedDependencies[dep[i]] = true; /******/ else hot._declinedDependencies[dep] = true; /******/ }, /******/ dispose: function (callback) { /******/ hot._disposeHandlers.push(callback); /******/ }, /******/ addDisposeHandler: function (callback) { /******/ hot._disposeHandlers.push(callback); /******/ }, /******/ removeDisposeHandler: function (callback) { /******/ var idx = hot._disposeHandlers.indexOf(callback); /******/ if (idx >= 0) hot._disposeHandlers.splice(idx, 1); /******/ }, /******/ invalidate: function () { /******/ this._selfInvalidated = true; /******/ switch (currentStatus) { /******/ case "idle": /******/ currentUpdateApplyHandlers = []; /******/ Object.keys(__webpack_require__.hmrI).forEach(function (key) { /******/ __webpack_require__.hmrI[key]( /******/ moduleId, /******/ currentUpdateApplyHandlers /******/ ); /******/ }); /******/ setStatus("ready"); /******/ break; /******/ case "ready": /******/ Object.keys(__webpack_require__.hmrI).forEach(function (key) { /******/ __webpack_require__.hmrI[key]( /******/ moduleId, /******/ currentUpdateApplyHandlers /******/ ); /******/ }); /******/ break; /******/ case "prepare": /******/ case "check": /******/ case "dispose": /******/ case "apply": /******/ (queuedInvalidatedModules = queuedInvalidatedModules || []).push( /******/ moduleId /******/ ); /******/ break; /******/ default: /******/ // ignore requests in error states /******/ break; /******/ } /******/ }, /******/ /******/ // Management API /******/ check: hotCheck, /******/ apply: hotApply, /******/ status: function (l) { /******/ if (!l) return currentStatus; /******/ registeredStatusHandlers.push(l); /******/ }, /******/ addStatusHandler: function (l) { /******/ registeredStatusHandlers.push(l); /******/ }, /******/ removeStatusHandler: function (l) { /******/ var idx = registeredStatusHandlers.indexOf(l); /******/ if (idx >= 0) registeredStatusHandlers.splice(idx, 1); /******/ }, /******/ /******/ //inherit from previous dispose call /******/ data: currentModuleData[moduleId] /******/ }; /******/ currentChildModule = undefined; /******/ return hot; /******/ } /******/ /******/ function setStatus(newStatus) { /******/ currentStatus = newStatus; /******/ var results = []; /******/ /******/ for (var i = 0; i < registeredStatusHandlers.length; i++) /******/ results[i] = registeredStatusHandlers[i].call(null, newStatus); /******/ /******/ return Promise.all(results).then(function () {}); /******/ } /******/ /******/ function unblock() { /******/ if (--blockingPromises === 0) { /******/ setStatus("ready").then(function () { /******/ if (blockingPromises === 0) { /******/ var list = blockingPromisesWaiting; /******/ blockingPromisesWaiting = []; /******/ for (var i = 0; i < list.length; i++) { /******/ list[i](); /******/ } /******/ } /******/ }); /******/ } /******/ } /******/ /******/ function trackBlockingPromise(promise) { /******/ switch (currentStatus) { /******/ case "ready": /******/ setStatus("prepare"); /******/ /* fallthrough */ /******/ case "prepare": /******/ blockingPromises++; /******/ promise.then(unblock, unblock); /******/ return promise; /******/ default: /******/ return promise; /******/ } /******/ } /******/ /******/ function waitForBlockingPromises(fn) { /******/ if (blockingPromises === 0) return fn(); /******/ return new Promise(function (resolve) { /******/ blockingPromisesWaiting.push(function () { /******/ resolve(fn()); /******/ }); /******/ }); /******/ } /******/ /******/ function hotCheck(applyOnUpdate) { /******/ if (currentStatus !== "idle") { /******/ throw new Error("check() is only allowed in idle status"); /******/ } /******/ return setStatus("check") /******/ .then(__webpack_require__.hmrM) /******/ .then(function (update) { /******/ if (!update) { /******/ return setStatus(applyInvalidatedModules() ? "ready" : "idle").then( /******/ function () { /******/ return null; /******/ } /******/ ); /******/ } /******/ /******/ return setStatus("prepare").then(function () { /******/ var updatedModules = []; /******/ currentUpdateApplyHandlers = []; /******/ /******/ return Promise.all( /******/ Object.keys(__webpack_require__.hmrC).reduce(function ( /******/ promises, /******/ key /******/ ) { /******/ __webpack_require__.hmrC[key]( /******/ update.c, /******/ update.r, /******/ update.m, /******/ promises, /******/ currentUpdateApplyHandlers, /******/ updatedModules /******/ ); /******/ return promises; /******/ }, []) /******/ ).then(function () { /******/ return waitForBlockingPromises(function () { /******/ if (applyOnUpdate) { /******/ return internalApply(applyOnUpdate); /******/ } else { /******/ return setStatus("ready").then(function () { /******/ return updatedModules; /******/ }); /******/ } /******/ }); /******/ }); /******/ }); /******/ }); /******/ } /******/ /******/ function hotApply(options) { /******/ if (currentStatus !== "ready") { /******/ return Promise.resolve().then(function () { /******/ throw new Error( /******/ "apply() is only allowed in ready status (state: " + /******/ currentStatus + /******/ ")" /******/ ); /******/ }); /******/ } /******/ return internalApply(options); /******/ } /******/ /******/ function internalApply(options) { /******/ options = options || {}; /******/ /******/ applyInvalidatedModules(); /******/ /******/ var results = currentUpdateApplyHandlers.map(function (handler) { /******/ return handler(options); /******/ }); /******/ currentUpdateApplyHandlers = undefined; /******/ /******/ var errors = results /******/ .map(function (r) { /******/ return r.error; /******/ }) /******/ .filter(Boolean); /******/ /******/ if (errors.length > 0) { /******/ return setStatus("abort").then(function () { /******/ throw errors[0]; /******/ }); /******/ } /******/ /******/ // Now in "dispose" phase /******/ var disposePromise = setStatus("dispose"); /******/ /******/ results.forEach(function (result) { /******/ if (result.dispose) result.dispose(); /******/ }); /******/ /******/ // Now in "apply" phase /******/ var applyPromise = setStatus("apply"); /******/ /******/ var error; /******/ var reportError = function (err) { /******/ if (!error) error = err; /******/ }; /******/ /******/ var outdatedModules = []; /******/ results.forEach(function (result) { /******/ if (result.apply) { /******/ var modules = result.apply(reportError); /******/ if (modules) { /******/ for (var i = 0; i < modules.length; i++) { /******/ outdatedModules.push(modules[i]); /******/ } /******/ } /******/ } /******/ }); /******/ /******/ return Promise.all([disposePromise, applyPromise]).then(function () { /******/ // handle errors in accept handlers and self accepted module load /******/ if (error) { /******/ return setStatus("fail").then(function () { /******/ throw error; /******/ }); /******/ } /******/ /******/ if (queuedInvalidatedModules) { /******/ return internalApply(options).then(function (list) { /******/ outdatedModules.forEach(function (moduleId) { /******/ if (list.indexOf(moduleId) < 0) list.push(moduleId); /******/ }); /******/ return list; /******/ }); /******/ } /******/ /******/ return setStatus("idle").then(function () { /******/ return outdatedModules; /******/ }); /******/ }); /******/ } /******/ /******/ function applyInvalidatedModules() { /******/ if (queuedInvalidatedModules) { /******/ if (!currentUpdateApplyHandlers) currentUpdateApplyHandlers = []; /******/ Object.keys(__webpack_require__.hmrI).forEach(function (key) { /******/ queuedInvalidatedModules.forEach(function (moduleId) { /******/ __webpack_require__.hmrI[key]( /******/ moduleId, /******/ currentUpdateApplyHandlers /******/ ); /******/ }); /******/ }); /******/ queuedInvalidatedModules = undefined; /******/ return true; /******/ } /******/ } /******/ }(); /******/ /******/ /* webpack/runtime/publicPath */ /******/ !function() { /******/ __webpack_require__.p = "https://digitalsilknew:8888/wp-content/themes/digitalsilk/assets/js/"; /******/ }(); /******/ /******/ /* webpack/runtime/jsonp chunk loading */ /******/ !function() { /******/ // no baseURI /******/ /******/ // object to store loaded and loading chunks /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded /******/ var installedChunks = __webpack_require__.hmrS_jsonp = __webpack_require__.hmrS_jsonp || { /******/ "app": 0 /******/ }; /******/ /******/ // no chunk on demand loading /******/ /******/ // no prefetching /******/ /******/ // no preloaded /******/ /******/ var currentUpdatedModulesList; /******/ var waitingUpdateResolves = {}; /******/ function loadUpdateChunk(chunkId, updatedModulesList) { /******/ currentUpdatedModulesList = updatedModulesList; /******/ return new Promise(function(resolve, reject) { /******/ waitingUpdateResolves[chunkId] = resolve; /******/ // start update chunk loading /******/ var url = __webpack_require__.p + __webpack_require__.hu(chunkId); /******/ // create error before stack unwound to get useful stacktrace later /******/ var error = new Error(); /******/ var loadingEnded = function(event) { /******/ if(waitingUpdateResolves[chunkId]) { /******/ waitingUpdateResolves[chunkId] = undefined /******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); /******/ var realSrc = event && event.target && event.target.src; /******/ error.message = 'Loading hot update chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; /******/ error.name = 'ChunkLoadError'; /******/ error.type = errorType; /******/ error.request = realSrc; /******/ reject(error); /******/ } /******/ }; /******/ __webpack_require__.l(url, loadingEnded); /******/ }); /******/ } /******/ /******/ self["webpackHotUpdate"] = function(chunkId, moreModules, runtime) { /******/ for(var moduleId in moreModules) { /******/ if(__webpack_require__.o(moreModules, moduleId)) { /******/ currentUpdate[moduleId] = moreModules[moduleId]; /******/ if(currentUpdatedModulesList) currentUpdatedModulesList.push(moduleId); /******/ } /******/ } /******/ if(runtime) currentUpdateRuntime.push(runtime); /******/ if(waitingUpdateResolves[chunkId]) { /******/ waitingUpdateResolves[chunkId](); /******/ waitingUpdateResolves[chunkId] = undefined; /******/ } /******/ }; /******/ /******/ var currentUpdateChunks; /******/ var currentUpdate; /******/ var currentUpdateRemovedChunks; /******/ var currentUpdateRuntime; /******/ function applyHandler(options) { /******/ if (__webpack_require__.f) delete __webpack_require__.f.jsonpHmr; /******/ currentUpdateChunks = undefined; /******/ function getAffectedModuleEffects(updateModuleId) { /******/ var outdatedModules = [updateModuleId]; /******/ var outdatedDependencies = {}; /******/ /******/ var queue = outdatedModules.map(function (id) { /******/ return { /******/ chain: [id], /******/ id: id /******/ }; /******/ }); /******/ while (queue.length > 0) { /******/ var queueItem = queue.pop(); /******/ var moduleId = queueItem.id; /******/ var chain = queueItem.chain; /******/ var module = __webpack_require__.c[moduleId]; /******/ if ( /******/ !module || /******/ (module.hot._selfAccepted && !module.hot._selfInvalidated) /******/ ) /******/ continue; /******/ if (module.hot._selfDeclined) { /******/ return { /******/ type: "self-declined", /******/ chain: chain, /******/ moduleId: moduleId /******/ }; /******/ } /******/ if (module.hot._main) { /******/ return { /******/ type: "unaccepted", /******/ chain: chain, /******/ moduleId: moduleId /******/ }; /******/ } /******/ for (var i = 0; i < module.parents.length; i++) { /******/ var parentId = module.parents[i]; /******/ var parent = __webpack_require__.c[parentId]; /******/ if (!parent) continue; /******/ if (parent.hot._declinedDependencies[moduleId]) { /******/ return { /******/ type: "declined", /******/ chain: chain.concat([parentId]), /******/ moduleId: moduleId, /******/ parentId: parentId /******/ }; /******/ } /******/ if (outdatedModules.indexOf(parentId) !== -1) continue; /******/ if (parent.hot._acceptedDependencies[moduleId]) { /******/ if (!outdatedDependencies[parentId]) /******/ outdatedDependencies[parentId] = []; /******/ addAllToSet(outdatedDependencies[parentId], [moduleId]); /******/ continue; /******/ } /******/ delete outdatedDependencies[parentId]; /******/ outdatedModules.push(parentId); /******/ queue.push({ /******/ chain: chain.concat([parentId]), /******/ id: parentId /******/ }); /******/ } /******/ } /******/ /******/ return { /******/ type: "accepted", /******/ moduleId: updateModuleId, /******/ outdatedModules: outdatedModules, /******/ outdatedDependencies: outdatedDependencies /******/ }; /******/ } /******/ /******/ function addAllToSet(a, b) { /******/ for (var i = 0; i < b.length; i++) { /******/ var item = b[i]; /******/ if (a.indexOf(item) === -1) a.push(item); /******/ } /******/ } /******/ /******/ // at begin all updates modules are outdated /******/ // the "outdated" status can propagate to parents if they don't accept the children /******/ var outdatedDependencies = {}; /******/ var outdatedModules = []; /******/ var appliedUpdate = {}; /******/ /******/ var warnUnexpectedRequire = function warnUnexpectedRequire(module) { /******/ console.warn( /******/ "[HMR] unexpected require(" + module.id + ") to disposed module" /******/ ); /******/ }; /******/ /******/ for (var moduleId in currentUpdate) { /******/ if (__webpack_require__.o(currentUpdate, moduleId)) { /******/ var newModuleFactory = currentUpdate[moduleId]; /******/ /** @type {TODO} */ /******/ var result; /******/ if (newModuleFactory) { /******/ result = getAffectedModuleEffects(moduleId); /******/ } else { /******/ result = { /******/ type: "disposed", /******/ moduleId: moduleId /******/ }; /******/ } /******/ /** @type {Error|false} */ /******/ var abortError = false; /******/ var doApply = false; /******/ var doDispose = false; /******/ var chainInfo = ""; /******/ if (result.chain) { /******/ chainInfo = "\nUpdate propagation: " + result.chain.join(" -> "); /******/ } /******/ switch (result.type) { /******/ case "self-declined": /******/ if (options.onDeclined) options.onDeclined(result); /******/ if (!options.ignoreDeclined) /******/ abortError = new Error( /******/ "Aborted because of self decline: " + /******/ result.moduleId + /******/ chainInfo /******/ ); /******/ break; /******/ case "declined": /******/ if (options.onDeclined) options.onDeclined(result); /******/ if (!options.ignoreDeclined) /******/ abortError = new Error( /******/ "Aborted because of declined dependency: " + /******/ result.moduleId + /******/ " in " + /******/ result.parentId + /******/ chainInfo /******/ ); /******/ break; /******/ case "unaccepted": /******/ if (options.onUnaccepted) options.onUnaccepted(result); /******/ if (!options.ignoreUnaccepted) /******/ abortError = new Error( /******/ "Aborted because " + moduleId + " is not accepted" + chainInfo /******/ ); /******/ break; /******/ case "accepted": /******/ if (options.onAccepted) options.onAccepted(result); /******/ doApply = true; /******/ break; /******/ case "disposed": /******/ if (options.onDisposed) options.onDisposed(result); /******/ doDispose = true; /******/ break; /******/ default: /******/ throw new Error("Unexception type " + result.type); /******/ } /******/ if (abortError) { /******/ return { /******/ error: abortError /******/ }; /******/ } /******/ if (doApply) { /******/ appliedUpdate[moduleId] = newModuleFactory; /******/ addAllToSet(outdatedModules, result.outdatedModules); /******/ for (moduleId in result.outdatedDependencies) { /******/ if (__webpack_require__.o(result.outdatedDependencies, moduleId)) { /******/ if (!outdatedDependencies[moduleId]) /******/ outdatedDependencies[moduleId] = []; /******/ addAllToSet( /******/ outdatedDependencies[moduleId], /******/ result.outdatedDependencies[moduleId] /******/ ); /******/ } /******/ } /******/ } /******/ if (doDispose) { /******/ addAllToSet(outdatedModules, [result.moduleId]); /******/ appliedUpdate[moduleId] = warnUnexpectedRequire; /******/ } /******/ } /******/ } /******/ currentUpdate = undefined; /******/ /******/ // Store self accepted outdated modules to require them later by the module system /******/ var outdatedSelfAcceptedModules = []; /******/ for (var j = 0; j < outdatedModules.length; j++) { /******/ var outdatedModuleId = outdatedModules[j]; /******/ var module = __webpack_require__.c[outdatedModuleId]; /******/ if ( /******/ module && /******/ (module.hot._selfAccepted || module.hot._main) && /******/ // removed self-accepted modules should not be required /******/ appliedUpdate[outdatedModuleId] !== warnUnexpectedRequire && /******/ // when called invalidate self-accepting is not possible /******/ !module.hot._selfInvalidated /******/ ) { /******/ outdatedSelfAcceptedModules.push({ /******/ module: outdatedModuleId, /******/ require: module.hot._requireSelf, /******/ errorHandler: module.hot._selfAccepted /******/ }); /******/ } /******/ } /******/ /******/ var moduleOutdatedDependencies; /******/ /******/ return { /******/ dispose: function () { /******/ currentUpdateRemovedChunks.forEach(function (chunkId) { /******/ delete installedChunks[chunkId]; /******/ }); /******/ currentUpdateRemovedChunks = undefined; /******/ /******/ var idx; /******/ var queue = outdatedModules.slice(); /******/ while (queue.length > 0) { /******/ var moduleId = queue.pop(); /******/ var module = __webpack_require__.c[moduleId]; /******/ if (!module) continue; /******/ /******/ var data = {}; /******/ /******/ // Call dispose handlers /******/ var disposeHandlers = module.hot._disposeHandlers; /******/ for (j = 0; j < disposeHandlers.length; j++) { /******/ disposeHandlers[j].call(null, data); /******/ } /******/ __webpack_require__.hmrD[moduleId] = data; /******/ /******/ // disable module (this disables requires from this module) /******/ module.hot.active = false; /******/ /******/ // remove module from cache /******/ delete __webpack_require__.c[moduleId]; /******/ /******/ // when disposing there is no need to call dispose handler /******/ delete outdatedDependencies[moduleId]; /******/ /******/ // remove "parents" references from all children /******/ for (j = 0; j < module.children.length; j++) { /******/ var child = __webpack_require__.c[module.children[j]]; /******/ if (!child) continue; /******/ idx = child.parents.indexOf(moduleId); /******/ if (idx >= 0) { /******/ child.parents.splice(idx, 1); /******/ } /******/ } /******/ } /******/ /******/ // remove outdated dependency from module children /******/ var dependency; /******/ for (var outdatedModuleId in outdatedDependencies) { /******/ if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { /******/ module = __webpack_require__.c[outdatedModuleId]; /******/ if (module) { /******/ moduleOutdatedDependencies = /******/ outdatedDependencies[outdatedModuleId]; /******/ for (j = 0; j < moduleOutdatedDependencies.length; j++) { /******/ dependency = moduleOutdatedDependencies[j]; /******/ idx = module.children.indexOf(dependency); /******/ if (idx >= 0) module.children.splice(idx, 1); /******/ } /******/ } /******/ } /******/ } /******/ }, /******/ apply: function (reportError) { /******/ // insert new code /******/ for (var updateModuleId in appliedUpdate) { /******/ if (__webpack_require__.o(appliedUpdate, updateModuleId)) { /******/ __webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId]; /******/ } /******/ } /******/ /******/ // run new runtime modules /******/ for (var i = 0; i < currentUpdateRuntime.length; i++) { /******/ currentUpdateRuntime[i](__webpack_require__); /******/ } /******/ /******/ // call accept handlers /******/ for (var outdatedModuleId in outdatedDependencies) { /******/ if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { /******/ var module = __webpack_require__.c[outdatedModuleId]; /******/ if (module) { /******/ moduleOutdatedDependencies = /******/ outdatedDependencies[outdatedModuleId]; /******/ var callbacks = []; /******/ var errorHandlers = []; /******/ var dependenciesForCallbacks = []; /******/ for (var j = 0; j < moduleOutdatedDependencies.length; j++) { /******/ var dependency = moduleOutdatedDependencies[j]; /******/ var acceptCallback = /******/ module.hot._acceptedDependencies[dependency]; /******/ var errorHandler = /******/ module.hot._acceptedErrorHandlers[dependency]; /******/ if (acceptCallback) { /******/ if (callbacks.indexOf(acceptCallback) !== -1) continue; /******/ callbacks.push(acceptCallback); /******/ errorHandlers.push(errorHandler); /******/ dependenciesForCallbacks.push(dependency); /******/ } /******/ } /******/ for (var k = 0; k < callbacks.length; k++) { /******/ try { /******/ callbacks[k].call(null, moduleOutdatedDependencies); /******/ } catch (err) { /******/ if (typeof errorHandlers[k] === "function") { /******/ try { /******/ errorHandlers[k](err, { /******/ moduleId: outdatedModuleId, /******/ dependencyId: dependenciesForCallbacks[k] /******/ }); /******/ } catch (err2) { /******/ if (options.onErrored) { /******/ options.onErrored({ /******/ type: "accept-error-handler-errored", /******/ moduleId: outdatedModuleId, /******/ dependencyId: dependenciesForCallbacks[k], /******/ error: err2, /******/ originalError: err /******/ }); /******/ } /******/ if (!options.ignoreErrored) { /******/ reportError(err2); /******/ reportError(err); /******/ } /******/ } /******/ } else { /******/ if (options.onErrored) { /******/ options.onErrored({ /******/ type: "accept-errored", /******/ moduleId: outdatedModuleId, /******/ dependencyId: dependenciesForCallbacks[k], /******/ error: err /******/ }); /******/ } /******/ if (!options.ignoreErrored) { /******/ reportError(err); /******/ } /******/ } /******/ } /******/ } /******/ } /******/ } /******/ } /******/ /******/ // Load self accepted modules /******/ for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) { /******/ var item = outdatedSelfAcceptedModules[o]; /******/ var moduleId = item.module; /******/ try { /******/ item.require(moduleId); /******/ } catch (err) { /******/ if (typeof item.errorHandler === "function") { /******/ try { /******/ item.errorHandler(err, { /******/ moduleId: moduleId, /******/ module: __webpack_require__.c[moduleId] /******/ }); /******/ } catch (err2) { /******/ if (options.onErrored) { /******/ options.onErrored({ /******/ type: "self-accept-error-handler-errored", /******/ moduleId: moduleId, /******/ error: err2, /******/ originalError: err /******/ }); /******/ } /******/ if (!options.ignoreErrored) { /******/ reportError(err2); /******/ reportError(err); /******/ } /******/ } /******/ } else { /******/ if (options.onErrored) { /******/ options.onErrored({ /******/ type: "self-accept-errored", /******/ moduleId: moduleId, /******/ error: err /******/ }); /******/ } /******/ if (!options.ignoreErrored) { /******/ reportError(err); /******/ } /******/ } /******/ } /******/ } /******/ /******/ return outdatedModules; /******/ } /******/ }; /******/ } /******/ __webpack_require__.hmrI.jsonp = function (moduleId, applyHandlers) { /******/ if (!currentUpdate) { /******/ currentUpdate = {}; /******/ currentUpdateRuntime = []; /******/ currentUpdateRemovedChunks = []; /******/ applyHandlers.push(applyHandler); /******/ } /******/ if (!__webpack_require__.o(currentUpdate, moduleId)) { /******/ currentUpdate[moduleId] = __webpack_require__.m[moduleId]; /******/ } /******/ }; /******/ __webpack_require__.hmrC.jsonp = function ( /******/ chunkIds, /******/ removedChunks, /******/ removedModules, /******/ promises, /******/ applyHandlers, /******/ updatedModulesList /******/ ) { /******/ applyHandlers.push(applyHandler); /******/ currentUpdateChunks = {}; /******/ currentUpdateRemovedChunks = removedChunks; /******/ currentUpdate = removedModules.reduce(function (obj, key) { /******/ obj[key] = false; /******/ return obj; /******/ }, {}); /******/ currentUpdateRuntime = []; /******/ chunkIds.forEach(function (chunkId) { /******/ if ( /******/ __webpack_require__.o(installedChunks, chunkId) && /******/ installedChunks[chunkId] !== undefined /******/ ) { /******/ promises.push(loadUpdateChunk(chunkId, updatedModulesList)); /******/ currentUpdateChunks[chunkId] = true; /******/ } else { /******/ currentUpdateChunks[chunkId] = false; /******/ } /******/ }); /******/ if (__webpack_require__.f) { /******/ __webpack_require__.f.jsonpHmr = function (chunkId, promises) { /******/ if ( /******/ currentUpdateChunks && /******/ __webpack_require__.o(currentUpdateChunks, chunkId) && /******/ !currentUpdateChunks[chunkId] /******/ ) { /******/ promises.push(loadUpdateChunk(chunkId)); /******/ currentUpdateChunks[chunkId] = true; /******/ } /******/ }; /******/ } /******/ }; /******/ /******/ __webpack_require__.hmrM = function() { /******/ if (typeof fetch === "undefined") throw new Error("No browser support: need fetch API"); /******/ return fetch(__webpack_require__.p + __webpack_require__.hmrF()).then(function(response) { /******/ if(response.status === 404) return; // no update available /******/ if(!response.ok) throw new Error("Failed to fetch update manifest " + response.statusText); /******/ return response.json(); /******/ }); /******/ }; /******/ /******/ // no on chunks loaded /******/ /******/ // no jsonp function /******/ }(); /******/ /************************************************************************/ /******/ /******/ // module cache are used so entry inlining is disabled /******/ // startup /******/ // Load entry module and return exports /******/ var __webpack_exports__ = __webpack_require__("./index.js"); /******/ /******/ })() ; //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUs7V0FDTDtXQUNBLElBQUk7V0FDSjs7V0FFQTtXQUNBO1dBQ0EsR0FBRztXQUNILEVBQUU7V0FDRjs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxJQUFJO1dBQ0osR0FBRztXQUNIO1dBQ0E7V0FDQTtXQUNBOzs7OztXQ25ZQTs7Ozs7V0NBQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7O1dBRUE7O1dBRUE7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLEVBQUU7V0FDRjs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsR0FBRztXQUNIO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLG1CQUFtQiwyQkFBMkI7V0FDOUM7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLEtBQUs7V0FDTDtXQUNBOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBOztXQUVBO1dBQ0Esa0JBQWtCLGNBQWM7V0FDaEM7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBOztXQUVBO1dBQ0E7V0FDQTtXQUNBLGNBQWMsTUFBTTtXQUNwQjtXQUNBO1dBQ0E7V0FDQSxLQUFLO1dBQ0w7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLGNBQWMsYUFBYTtXQUMzQjtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7V0FDQTtXQUNBLGlCQUFpQiw0QkFBNEI7V0FDN0M7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLElBQUk7V0FDSjtXQUNBOztXQUVBOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsSUFBSTtXQUNKOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7V0FFQTs7V0FFQTtXQUNBO1dBQ0EsZ0JBQWdCLDRCQUE0QjtXQUM1QztXQUNBO1dBQ0E7O1dBRUE7V0FDQTs7V0FFQTtXQUNBOztXQUVBO1dBQ0E7O1dBRUE7V0FDQSxnQkFBZ0IsNEJBQTRCO1dBQzVDO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLGtCQUFrQix1Q0FBdUM7V0FDekQ7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxHQUFHO1dBQ0g7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7V0FDQSxtQkFBbUIsaUNBQWlDO1dBQ3BEO1dBQ0E7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxzQkFBc0IsdUNBQXVDO1dBQzdEO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHNCQUFzQixzQkFBc0I7V0FDNUM7V0FDQTtXQUNBLFNBQVM7V0FDVDtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsV0FBVztXQUNYLFdBQVc7V0FDWDtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLFlBQVk7V0FDWjtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxVQUFVO1dBQ1Y7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsV0FBVztXQUNYO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBOztXQUVBO1dBQ0EsbUJBQW1CLHdDQUF3QztXQUMzRDtXQUNBO1dBQ0E7V0FDQTtXQUNBLE1BQU07V0FDTjtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsUUFBUTtXQUNSLFFBQVE7V0FDUjtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxTQUFTO1dBQ1Q7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsT0FBTztXQUNQO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxRQUFRO1dBQ1I7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLEVBQUUsSUFBSTtXQUNOO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxJQUFJO1dBQ0o7V0FDQTtXQUNBLEVBQUU7V0FDRjtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQSxzQ0FBc0M7V0FDdEM7V0FDQTtXQUNBLEVBQUU7V0FDRjs7V0FFQTs7V0FFQTs7Ozs7VUU5ZkE7VUFDQTtVQUNBO1VBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL2F1dG8tdGFicy5qcyIsIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL2JhLWNvbGxhcHNlci5qcyIsIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL2JhLXNpbmdsZS5qcyIsIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL2JhY2stdG8tdG9wLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvYm94LWN0YS13aWRnZXQtY29va2llLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvY2FsY3VsYXRvci13aWRnZXQuanMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9jYWxjdWxhdG9yLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvY2FzZS1zdHVkaWVzLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvY2FzZS1zdHVkeS10YWJzLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvY29udi1jYWxjLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvZXhwYW5kLWltYWdlLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvZmFrZS1tZW51LmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvZm9vdC1hY2NvcmRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9mb290ZXItaG92ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9nLWZvcm1zLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvaGVyby1wbGF5ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9sb2FkLW1vcmUtcHJvamVjdHMuanMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9sb2FkLW1vcmUtc29sdXRpb25zLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvbG9jYXRpb24tYWNjb3JkaW9uLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvbG9nby1zbGlkZXIuanMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9tZW51LWhvdmVyLWVmZmVjdC5qcyIsIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL3BhdXNlLWhlcm8tYW5pbS5qcyIsIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL3Byb2dyZXNzLWJhci5qcyIsIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL3JlYWQtbW9yZS5qcyIsIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL3Njcm9sbGVyLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvc2l0ZS1zZWFyY2guanMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9zdGlja3ktd2hpdGVwYXBlci5qcyIsIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL3RhYnMtdW5kZXJsaW5lLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvdG9nZ2xlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vZnVuY3Rpb24tY2FsbHMvYWNjb3JkaW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9mdW5jdGlvbi1jYWxscy9hY2NvcmRpb25zL2FjY29yZGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vZnVuY3Rpb24tY2FsbHMvYm94LWN0YS1wb3NpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9mdW5jdGlvbi1jYWxscy9zbGlkZXJzLmpzIiwid2VicGFjazovLy8uL2Z1bmN0aW9uLWNhbGxzL3NsaWRlcnMvc2xpZGVyLWFkdmFuY2VkLmpzIiwid2VicGFjazovLy8uL2Z1bmN0aW9uLWNhbGxzL3NsaWRlcnMvc2xpZGVyLWJhLmpzIiwid2VicGFjazovLy8uL2Z1bmN0aW9uLWNhbGxzL3NsaWRlcnMvc2xpZGVyLWRzYmxzLmpzIiwid2VicGFjazovLy8uL2Z1bmN0aW9uLWNhbGxzL3NsaWRlcnMvc2xpZGVyLXNpbXBsZS5qcyIsIndlYnBhY2s6Ly8vLi9mdW5jdGlvbi1jYWxscy9zbGlkZXJzL3NsaWRlci12ZXJ0aWNhbC5qcyIsIndlYnBhY2s6Ly8vLi9mdW5jdGlvbi1jYWxscy90YWJzLXRvLWFjY29yZGlvbi1tb2JpbGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnVuY3Rpb24tY2FsbHMvdGlueW1jZS1yZWFkLW1vcmUvcmVhZC1tb3JlLmpzIiwid2VicGFjazovLy8uL2hlYWRlci9tb2JpbGUtbmF2LmpzIiwid2VicGFjazovLy8uL2hlYWRlci9zdGlja3ktaGVhZGVyLmpzIiwid2VicGFjazovLy8uL2hlYWRlci90b2dnbGUtc3VibWVudS5qcyIsIndlYnBhY2s6Ly8vLi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L2FuaW1hdGlvbnMvZWFzaW5ncy1lczYuanMiLCJ3ZWJwYWNrOi8vLy4vbGlicmFyeS9hbmltYXRpb25zL3Njcm9sbC10by5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L2NvbGxhcHNlcnMvZ3JpZGRlci1pbml0LmpzIiwid2VicGFjazovLy8uL2xpYnJhcnkvY291bnRlcnMvcHVyZWNvdW50ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbGlicmFyeS9tZWRpYS1jb250cm9scy9tZWRpYS1jb250cm9sLmpzIiwid2VicGFjazovLy8uL2xpYnJhcnkvc2xpZGVycy9zbGlkZXItZHNibHMuanMiLCJ3ZWJwYWNrOi8vLy4vbGlicmFyeS9zbGlkZXJzL3NsaWRlci1vcHRpb25zL2F1dG9wbGF5LmpzIiwid2VicGFjazovLy8uL2xpYnJhcnkvc2xpZGVycy9zbGlkZXItb3B0aW9ucy9icmVha3BvaW50cy5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L3NsaWRlcnMvc2xpZGVyLW9wdGlvbnMvZWZmZWN0cy5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L3NsaWRlcnMvc2xpZGVyLW9wdGlvbnMvbGF6eS5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L3NsaWRlcnMvc2xpZGVyLW9wdGlvbnMvbG9vcC5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L3NsaWRlcnMvc2xpZGVyLW9wdGlvbnMvbmF2aWdhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L3NsaWRlcnMvc2xpZGVyLW9wdGlvbnMvc2xpZGUtdG8tY2xpY2tlZC1zbGlkZS5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L3NsaWRlcnMvc3dpcGVyLXdpdGgtdGFicy5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L3RhYnMtYWNjb3JkaW9ucy9EU01QQWNjb3JkaW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L3RhYnMtYWNjb3JkaW9ucy9EU01QVGFicy1kcm9wZG93bi5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L3RhYnMtYWNjb3JkaW9ucy9EU01QVGFicy10YWIuanMiLCJ3ZWJwYWNrOi8vLy4vbGlicmFyeS90YWJzLWFjY29yZGlvbnMvRFNNUFRhYnMtdGFiZHJvcGRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbGlicmFyeS90YWJzLWFjY29yZGlvbnMvRFNNUFRhYnNDbGFzcy5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L3RhYnMtYWNjb3JkaW9ucy9EU01QVGFic1RvQWNjb3JkaW9uTW9iaWxlLmpzIiwid2VicGFjazovLy8uL2xpYnJhcnkvdGFicy1hY2NvcmRpb25zL3RhYi1hY2NvcmRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbGlicmFyeS90YWJzLWFjY29yZGlvbnMvdGFiLXNpbmdsZS5qcyIsIndlYnBhY2s6Ly8vLi9sb2FkLW1vcmUvbG9hZC1tb3JlLXBvc3RzLmpzIiwid2VicGFjazovLy8uL3BhdGNoZXMvdGFic1RhYkRyb3AuanMiLCJ3ZWJwYWNrOi8vLy4vdXRpbHMvdV9jbGFzc2xpc3QtYWRkLXJlbW92ZS5qcyIsIndlYnBhY2s6Ly8vLi91dGlscy91X2VsLWluLXZpZXdwb3J0LWRldGVjdC5qcyIsIndlYnBhY2s6Ly8vLi91dGlscy91X2ZhZGUtaW4tb3V0LmpzIiwid2VicGFjazovLy8uL3V0aWxzL3VfaXMtdG91Y2gtZGV2aWNlLmpzIiwid2VicGFjazovLy8uL3V0aWxzL3Vfb2JqZWN0X2V4dGVuZC5qcyIsIndlYnBhY2s6Ly8vLi91dGlscy91X3NsaWRlLXVwLWRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vdXRpbHMvdV90eXBlcy5qcyIsIndlYnBhY2s6Ly8vLi91dGlscy91dGlscy5qcyIsIndlYnBhY2s6Ly8vLi92aXN1YWxzL3Njcm9sbC1hbmltYXRpb25zLmpzIiwid2VicGFjazovLy8uL3Zpc3VhbHMvdmlkZW8taG92ZXIuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHZhciBcImpRdWVyeVwiIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZ2V0IGphdmFzY3JpcHQgdXBkYXRlIGNodW5rIGZpbGVuYW1lIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZ2V0IHVwZGF0ZSBtYW5pZmVzdCBmaWxlbmFtZSIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2dldEZ1bGxIYXNoIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvbG9hZCBzY3JpcHQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9ob3QgbW9kdWxlIHJlcGxhY2VtZW50Iiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvcHVibGljUGF0aCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2pzb25wIGNodW5rIGxvYWRpbmciLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYmVmb3JlLXN0YXJ0dXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svc3RhcnR1cCIsIndlYnBhY2s6Ly8vd2VicGFjay9hZnRlci1zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBhdXRvVGFicygpIHtcblxuICAgIGlmKCQoXCIuaGVybyAucHJvamVjdHNcIikubGVuZ3RoKXtcblxuICAgICAgICBzZXRJbnRlcnZhbChmdW5jdGlvbigpe1xuICAgICAgICAgICAgdmFyIGFjdGl2ZV9hdXRvVGFiID0gJCgnLmpzLWF1dG8tbG9vcC10YWJzLmlzLWFjdGl2ZScpO1xuICAgICAgICAgICAgdmFyIGZpcnN0X2F1dG9UYWIgPSAkKCcuanMtYXV0by1sb29wLXRhYnMuZmlyc3QnKTtcblxuICAgICAgICAgICAgaWYoIGFjdGl2ZV9hdXRvVGFiLmhhc0NsYXNzKFwibGFzdFwiKSApXG4gICAgICAgICAgICAgICAgZmlyc3RfYXV0b1RhYi5jbGljaygpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGFjdGl2ZV9hdXRvVGFiLm5leHQoKS5jbGljaygpO1xuICAgICAgICB9LCA0MDAwKTtcbiAgICB9XG59XG4iLCIvKipcbiAqIFRvZ2dsZSBtb2JpbGUgbmF2XG4gKiBAcGFyYW0ge3N0cmluZ30gZWwgLSBzZWxlY3RvciBmb3IgYWRkaW5nIGFuIGFjdGl2ZSBjbGFzc1xuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBiYUNvbGxhcHNlcihlbCwgZWxUYXJnZXQpIHtcblxuICAgIGNvbnN0IGJ0biA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpO1xuICAgIGNvbnN0IGJ0blR4dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpO1xuXG4gICAgaWYgKGJ0bikge1xuXG4gICAgICAgIGNvbnN0IGJ0blRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWxUYXJnZXQpO1xuICAgICAgICBjb25zdCBidG5UYXJnZXQyID0gYnRuVGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJy5iYS1uYXYnKTtcblxuICAgICAgICBsZXQgY3VycmVudFNsaWRlID0gYnRuVGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoJy5iYS1zbGlkZXIgLnN3aXBlci1zbGlkZScpO1xuICAgICAgICBcbiAgICAgICAgY3VycmVudFNsaWRlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KXtcbiAgICAgICAgICAgIGxldCBjdXJyZW50RXhwYW5kZXIgPSBpdGVtLnF1ZXJ5U2VsZWN0b3IoJy5sLXRlc3RpbW9uaWFscyAnKTtcbiAgICAgICAgICAgIGxldCBoZWlnaHQgPSBpdGVtLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpLm9mZnNldEhlaWdodDtcblxuICAgICAgICAgICAgY3VycmVudEV4cGFuZGVyLnN0eWxlLm1heEhlaWdodCA9IGAke2hlaWdodH1weGA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBsZXQgY3VycmVudFNsaWRlID0gYnRuVGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJy5iYS1zbGlkZXIgLnN3aXBlci1zbGlkZScpO1xuICAgICAgICAgICAgbGV0IGhlaWdodCA9IGN1cnJlbnRTbGlkZS5xdWVyeVNlbGVjdG9yKCdpbWcnKS5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICBsZXQgc2xpZGVyID0gYnRuVGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJy5iYS1zbGlkZXIgLnN3aXBlci13cmFwcGVyJyk7XG4gICAgICAgICAgICBpZiAoYnRuVGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnYmEtYWN0aXZlJykpIHtcbiAgICAgICAgICAgICAgICBidG5UYXJnZXQuY2xhc3NMaXN0LnJlbW92ZSgnYmEtYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgYnRuVGFyZ2V0Mi5zY3JvbGxJbnRvVmlldyh7ICBibG9jazogXCJzdGFydFwiIH0pO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzbGlkZXIuc3R5bGUuaGVpZ2h0ID0gXCJhdXRvXCI7XG4gICAgICAgICAgICAgICAgfSwgMTIwMCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJ0blRhcmdldC5jbGFzc0xpc3QuYWRkKCdiYS1hY3RpdmUnKTtcbiAgICAgICAgICAgICAgICBzbGlkZXIuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBleHBhbmRCQUltYWdlKCkge1xuICAgICQoXCIuYmFzLWV4cGFuZGVyIC5jLXF6LWJ0blwiKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJCh0aGlzKS5jbGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoJCh0aGlzKS5oYXNDbGFzcyhcIm9uXCIpKSB7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5wcmV2KCkuY3NzKCdtaW4taGVpZ2h0JywgJycpO1xuICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoXCJvblwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9ICQodGhpcykucGFyZW50KCkucHJldigpLmZpbmQoXCIuYy1pbWFnZV9fbWVkaWFcIikub3V0ZXJIZWlnaHQoKTtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnByZXYoKS5jc3MoJ21pbi1oZWlnaHQnLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoXCJvblwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9KTtcbn0iLCJleHBvcnQgZnVuY3Rpb24gYmFja1RvVG9wKGVsKSB7XG4gICAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWwpO1xuXG4gICAgaWYoYnRuKSB7XG4gICAgICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGwoe1xuICAgICAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgfVxufVxuIiwiY2xhc3MgaGlkZV9ib3hfY3RhX3dpZGdldCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY29va2llX25hbWUgPSAnaGlkZV9ib3hfY3RhX3dpZGdldCc7XG4gICAgICAgIHRoaXMuY29va2llX2R1cmF0aW9uID0gMzA7IC8vIER1cmF0aW9uIGluIGRheXNcbiAgICAgICAgdGhpcy53aWRnZXRfc2VsZWN0b3IgPSAnLmpzLWNsb3NlLWJveC1jdGEtd2lkZ2V0JztcbiAgICAgICAgdGhpcy5ib3hfc2VsZWN0b3IgPSAnLmJveC1jdGEuLXNpdGUtd2lkZSc7XG5cbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgaW5pdCgpIHtcbiAgICAgICAgLy8gQ2hlY2sgY29va2llIGFuZCBoaWRlIGJveCBpZiBzZXRcbiAgICAgICAgaWYgKHRoaXMuZ2V0X2Nvb2tpZSh0aGlzLmNvb2tpZV9uYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5oaWRlX2JveCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93X2JveCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmluZCBldmVudCBsaXN0ZW5lciB0byBoaWRlIGJveCBvbiBjbGlja1xuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMud2lkZ2V0X3NlbGVjdG9yKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5zZXRfY29va2llKHRoaXMuY29va2llX25hbWUsICd0cnVlJywgdGhpcy5jb29raWVfZHVyYXRpb24pO1xuICAgICAgICAgICAgdGhpcy5oaWRlX2JveCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBoaWRlX2JveCgpIHtcbiAgICAgICAgY29uc3QgYm94ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmJveF9zZWxlY3Rvcik7XG4gICAgICAgIGlmIChib3gpIHtcbiAgICAgICAgICAgIGJveC5jbGFzc0xpc3QuYWRkKCdoaWRlLWJveC1jdGEtd2lkZ2V0Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaG93X2JveCgpIHtcbiAgICAgICAgY29uc3QgYm94ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmJveF9zZWxlY3Rvcik7XG4gICAgICAgIGlmIChib3gpIHtcbiAgICAgICAgICAgIGJveC5jbGFzc0xpc3QucmVtb3ZlKCdoaWRlLWJveC1jdGEtd2lkZ2V0Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRfY29va2llKG5hbWUsIHZhbHVlLCBkYXlzKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyAoZGF5cyAqIDI0ICogNjAgKiA2MCAqIDEwMDApKTtcbiAgICAgICAgZG9jdW1lbnQuY29va2llID0gYCR7bmFtZX09JHt2YWx1ZX07IGV4cGlyZXM9JHtkYXRlLnRvVVRDU3RyaW5nKCl9OyBwYXRoPS9gO1xuICAgIH1cblxuICAgIGdldF9jb29raWUobmFtZSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGA7ICR7ZG9jdW1lbnQuY29va2llfWA7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gdmFsdWUuc3BsaXQoYDsgJHtuYW1lfT1gKTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMikgcmV0dXJuIHBhcnRzLnBvcCgpLnNwbGl0KCc7Jykuc2hpZnQoKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBoaWRlX2JveF9jdGFfd2lkZ2V0OyIsImNvbnN0IHByaWNlQ2FsY3VsYXRvcldpZGdldCA9ICgpID0+IHtcbiAgICBjb25zdCBjYWxjdWxhdG9yV2lkZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLWNhbGMtd2lkZ2V0Jyk7XG5cbiAgICBpZiAoIWNhbGN1bGF0b3JXaWRnZXQpIHJldHVybjtcblxuICAgIGNvbnN0IGFycm93SW5jcmVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLWJ0bi1wYWdlLWluY3JlbWVudCcpO1xuICAgIGNvbnN0IGFycm93RGVjcmVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLWJ0bi1wYWdlLWRlY3JlbWVudCcpO1xuICAgIGNvbnN0IGlucHV0VG9VcGRhdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbnVtYmVyLW9mLXBhZ2VzJyk7XG5cbiAgICBhcnJvd0luY3JlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgaWYgKGlucHV0VG9VcGRhdGUudmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIGlucHV0VG9VcGRhdGUudmFsdWUgPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXRUb1VwZGF0ZS52YWx1ZSA9IHBhcnNlSW50KGlucHV0VG9VcGRhdGUudmFsdWUpICsgMTtcbiAgICAgICAgfVxuICAgIH0pXG5cbiAgICBhcnJvd0RlY3JlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgaWYgKGlucHV0VG9VcGRhdGUudmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIGlucHV0VG9VcGRhdGUudmFsdWUgPSAxO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGlucHV0VG9VcGRhdGUudmFsdWUpID4gMSkge1xuICAgICAgICAgICAgaW5wdXRUb1VwZGF0ZS52YWx1ZSA9IHBhcnNlSW50KGlucHV0VG9VcGRhdGUudmFsdWUpIC0gMTtcbiAgICAgICAgfVxuICAgIH0pXG5cblxufVxuXG5leHBvcnQge1xuICAgIHByaWNlQ2FsY3VsYXRvcldpZGdldFxufSIsImV4cG9ydCBmdW5jdGlvbiBwcmljZUNhbGN1bGF0b3IoKSB7XG4gICAgLy8gQ2hlY2sgaWYgLmNhbGMtZm9ybSBleGlzdHNcbiAgICB2YXIgY2FsY0Zvcm0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2FsYy1mb3JtJyk7XG5cbiAgICBpZiAoY2FsY0Zvcm0pIHtcblxuICAgICAgICBmdW5jdGlvbiBsZWdlbmRzKCl7XG4gICAgICAgICAgICB2YXIgcmFkaW9MZWdlbmRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmdmaWVsZC0tdHlwZS1yYWRpbyBsZWdlbmQnKTtcblxuICAgICAgICAgICAgcmFkaW9MZWdlbmRzLmZvckVhY2goZnVuY3Rpb24gKGxlZ2VuZCkge1xuICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBkaXYgZWxlbWVudFxuICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgY2xhc3MgXCJsZWdlbmQtd3JhcFwiIHRvIHRoZSB3cmFwcGVyIGRpdlxuICAgICAgICAgICAgICAgIHdyYXBwZXJEaXYuY2xhc3NMaXN0LmFkZCgnbGVnZW5kLXdyYXAnKTtcblxuICAgICAgICAgICAgICAgIC8vIFdyYXAgdGhlIGxlZ2VuZCBlbGVtZW50IHdpdGggdGhlIG5ldyBkaXZcbiAgICAgICAgICAgICAgICBsZWdlbmQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUod3JhcHBlckRpdiwgbGVnZW5kKTtcbiAgICAgICAgICAgICAgICB3cmFwcGVyRGl2LmFwcGVuZENoaWxkKGxlZ2VuZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgalF1ZXJ5KGRvY3VtZW50KS5vbignZ2Zvcm1fcG9zdF9yZW5kZXInLCBmdW5jdGlvbihldmVudCwgZm9ybV9pZCwgY3VycmVudF9wYWdlKXtcbiAgICAgICAgICAgIC8vIGlmIGN1cnJlbnQgcGFnZSBpcyAyIGFjdGl2YXRlIHBhZ2UgMVxuICAgICAgICAgICAgaWYgKGN1cnJlbnRfcGFnZSA9PSAyKSB7XG4gICAgICAgICAgICAgICAgbGVnZW5kcygpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAkKFwiLmdmb3JtX3BhZ2VbaWQkPV8xXVwiKS5hZGRDbGFzcygnb24nKTtcbiAgICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgJChcIi5nZm9ybV9wYWdlW2lkJD1fMV1cIikuYWRkQ2xhc3MoJ29uJyk7XG4gICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICAgICAgICAvLyBpZiBjdXJyZW50IHBhZ2UgaXMgMSBhY3RpdmF0ZSBwYWdlIDJcbiAgICAgICAgICAgIH1lbHNlIGlmKGN1cnJlbnRfcGFnZSA9PSAxKXtcbiAgICAgICAgICAgICAgICBsZWdlbmRzKCk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuZ2Zvcm1fcGFnZVtpZCQ9XzJdXCIpLmFkZENsYXNzKCdvbicpO1xuICAgICAgICAgICAgICAgIH0sIDYwMCk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuZ2Zvcm1fcGFnZVtpZCQ9XzJdXCIpLmFkZENsYXNzKCdvbicpO1xuICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgICB9XG4gICAgIFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBkYXRhIGxheWVycyBmb3IgZ29vZ2xlXG4gICAgICAgIGNvbnN0IGZvcm1XcmFwID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNhbGMtZm9ybV93cmFwcGVyIC5nZm9ybV9wYWdlICcpO1xuICAgICAgICBjb25zdCBzZWNQYWdlID0gZm9ybVdyYXAucGFyZW50RWxlbWVudC5jaGlsZHJlblsxXTtcbiAgICAgICAgLy8gY29uc3QgbGFzdFBhZ2UgPSBmb3JtV3JhcC5wYXJlbnRFbGVtZW50LmNoaWxkcmVuWzJdO1xuXG5cbiAgICAgICAgLy8gR2V0IHRoZSBuZXh0IGJ1dHRvbiBvZiB0aGUgc2Vjb25kIHBhZ2VcbiAgICAgICAgY29uc3QgYnV0dG9uTmV4dCA9IHNlY1BhZ2UucXVlcnlTZWxlY3RvcihcIi5nZm9ybV9uZXh0X2J1dHRvblwiKTtcblxuICAgICAgICAvLyBHZXQgdGhlIHN1Ym1pdCBidXR0b25cbiAgICAgICAgLy8gY29uc3QgYnV0dG9uU3VibWl0ID0gbGFzdFBhZ2UucXVlcnlTZWxlY3RvcihcIi5nZm9ybV9uZXh0X2J1dHRvblwiKTtcblxuICAgICAgICAvLyBHZXQgdGhlIGZpcnN0IHBhZ2UgaW5wdXQgKElEcyBkaWZmZXJzIHBlciBkb21haW4gLSBjaGVjayBMSVZFKVxuICAgICAgICBjb25zdCB3VHlwZUlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0XzEyXzE1Jyk7XG4gICAgICAgIGNvbnN0IG5QYWdlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnB1dF8xMl8xNicpO1xuICAgICAgICBjb25zdCBoUmF0ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnB1dF8xMl8xMCcpO1xuXG4gICAgICAgIC8vIEdldCB0aGUgU2Vjb25kIHBhZ2UgcmFkaW8gZmllbGRzZXRzIChJRCBkaWZmZXJzIHBlciBkb21haW4gLSBjaGVjayBMSVZFKVxuICAgICAgICBjb25zdCBmaWVsZHNldENvbnRhaW5lciA9IHNlY1BhZ2U7XG4gICAgICAgIGNvbnN0IGZpZWxkc2V0cyA9IGZpZWxkc2V0Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ2ZpZWxkc2V0Jyk7XG5cbiAgICAgICAgLy8gT2JqZWN0IHRvIHN0b3JlIGNoYW5nZXMgZm9yIGVhY2ggZmllbGRzZXRcbiAgICAgICAgY29uc3QgZmllbGRzZXRDaGFuZ2VzID0ge307XG5cbiAgICAgICAgLy8gRnVuY3Rpb24gdG8gZ2V0IHZhbHVlcyBhbmQgaGFuZGxlIGNoYW5nZXMgZm9yIGEgZ2l2ZW4gZmllbGRzZXRcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlRmllbGRzZXRDaGFuZ2VzKGZpZWxkc2V0SWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkc2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmllbGRzZXRJZCk7XG4gICAgICAgICAgICBmaWVsZHNldC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCcpLmZvckVhY2goaW5wdXQgPT4ge1xuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgdGhlIHJhZGlvIGRlZmF1bHQgY2hvaWNlIGFuZCBzZXQgdGhlIG91dHB1dCBmb3IgZGF0YSBsYXllclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrZWRSYWRpbyA9IGZpZWxkc2V0LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJyYWRpb1wiXTpjaGVja2VkJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBmaWVsZHNldC5xdWVyeVNlbGVjdG9yKGBsYWJlbFtmb3I9XCIke2NoZWNrZWRSYWRpby5pZH1cIl1gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbFRleHQgPSBsYWJlbC50ZXh0Q29udGVudC50cmltKCk7XG4gICAgICAgICAgICAgICAgZmllbGRzZXRDaGFuZ2VzW2ZpZWxkc2V0SWRdID0gbGFiZWxUZXh0OyBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBvbiBjaGFuZ2VzIHVwZGF0ZSB0aGUgb3V0cHV0IGZvciB0aGUgZGF0YSBsYXllclxuICAgICAgICAgICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0SWQgPSBldmVudC50YXJnZXQuaWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGFiZWxbZm9yPVwiJHtpbnB1dElkfVwiXWApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHNldENoYW5nZSA9IGxhYmVsLnRleHRDb250ZW50LnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzZXRDaGFuZ2VzW2ZpZWxkc2V0SWRdID0gZmllbGRzZXRDaGFuZ2U7IC8vIFN0b3JlIHRoZSBjaGFuZ2UgZm9yIHRoaXMgZmllbGRzZXRcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYENoYW5nZSBpbiBmaWVsZHNldCAke2ZpZWxkc2V0SWR9OiAke2ZpZWxkc2V0Q2hhbmdlfWApOyBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggZmllbGRzZXQgdG8gY29sbGVjdCBjaGVja2VkIGxhYmVscyBhbmQgc2V0IHVwIGV2ZW50IGxpc3RlbmVyc1xuICAgICAgICBmaWVsZHNldHMuZm9yRWFjaChmaWVsZHNldCA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZHNldElkID0gZmllbGRzZXQuaWQ7XG4gICAgICAgICAgICBoYW5kbGVGaWVsZHNldENoYW5nZXMoZmllbGRzZXRJZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBzdGVwTiA9IFwiXCI7XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0VmFsdWVzKCkge1xuICAgICAgICAgICAgLy8gZ2V0IHZhbHVlcyBmb3IgZmlyc3QgcGFnZVxuICAgICAgICAgICAgY29uc3Qgd1R5cGVTZWxlY3Rpb24gPSB3VHlwZUlkLm9wdGlvbnNbd1R5cGVJZC5zZWxlY3RlZEluZGV4XS5pbm5lclRleHQ7XG4gICAgICAgICAgICBjb25zdCBuUGFnZXNWYWwgPSBuUGFnZXMudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBoUmF0ZVZhbCAgPSBoUmF0ZS52YWx1ZTtcblxuICAgICAgICAgICAgLy8gaGFuZGxlIGRhdGEgZHluYW1pY2FsbHkgZm9yIHNlY29uZCBwYWdlXG4gICAgICAgICAgICBjb25zdCBldmVudERhdGEgPSB7fTtcbiAgICAgICAgICAgIGZpZWxkc2V0cy5mb3JFYWNoKGZpZWxkc2V0ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHNldElkID0gZmllbGRzZXQuaWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVnZW5kVGV4dCA9IGZpZWxkc2V0LnF1ZXJ5U2VsZWN0b3IoJ2xlZ2VuZCcpLnRleHRDb250ZW50LnRyaW0oKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRMZWdlbmQgPSBsZWdlbmRUZXh0LnJlcGxhY2UoL1teYS16QS1aMC05XSsoLnwkKS9nLCAobWF0Y2gsIGNocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hyID8gY2hyLnRvVXBwZXJDYXNlKCkgOiAnJztcbiAgICAgICAgICAgICAgICB9KS5yZXBsYWNlKC9eLi8sIChtYXRjaCkgPT4gbWF0Y2gudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgZXZlbnREYXRhW2Zvcm1hdHRlZExlZ2VuZF0gPSBmaWVsZHNldENoYW5nZXNbZmllbGRzZXRJZF0gfHwgJ05vIHJhZGlvIGJ1dHRvbiBjaGVja2VkJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coey4uLmV2ZW50RGF0YX0pO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cod1R5cGVTZWxlY3Rpb24pO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coblBhZ2VzVmFsKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGhSYXRlVmFsKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHN0ZXBOKTtcbiAgICAgICAgICAgIC8vIFB1c2hpbmcgdmFyaWFibGVzIHRvIGRhdGFMYXllclxuICAgICAgICAgICAgd2luZG93LmRhdGFMYXllciA9IHdpbmRvdy5kYXRhTGF5ZXIgfHwgW107XG4gICAgICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goe1xuICAgICAgICAgICAgICAgICdldmVudCc6IHN0ZXBOLFxuICAgICAgICAgICAgICAgICd3ZWJzaXRlVHlwZSc6IHdUeXBlU2VsZWN0aW9uLCAvLyBSZXBsYWNlIHdpdGggYWN0dWFsIGRhdGFcbiAgICAgICAgICAgICAgICAnbGFuZGluZ1BhZ2VzJzogblBhZ2VzVmFsLCAvLyBSZXBsYWNlIHdpdGggYWN0dWFsIGRhdGFcbiAgICAgICAgICAgICAgICAnaG91cmx5UmF0ZSc6IGhSYXRlVmFsLCAvLyBSZXBsYWNlIHdpdGggYWN0dWFsIGRhdGFcbiAgICAgICAgICAgICAgICAuLi5ldmVudERhdGFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJ1dHRvbk5leHQpIHtcbiAgICAgICAgICAgIGJ1dHRvbk5leHQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3RlcE4gPSBcIndlYnNpdGVfY2FsY3VsYXRvcl9mb3JtX3N0ZXAxXCI7XG4gICAgICAgICAgICAgICAgZ2V0VmFsdWVzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGpRdWVyeShkb2N1bWVudCkub24oJ2dmb3JtX2NvbmZpcm1hdGlvbl9sb2FkZWQnLCBmdW5jdGlvbihldmVudCwgZm9ybUlkKXtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYoKGZvcm1JZCA9PSAxMikgfHwgKGZvcm1JZCA9PSAxNikpIHtcbiAgICAgICAgICAgICAgICBzdGVwTiA9IFwid2Vic2l0ZV9jYWxjdWxhdG9yX2Zvcm1fZmluaXNoXCI7XG4gICAgICAgICAgICAgICAgZ2V0VmFsdWVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgY29uc3QgY3VzdG9tU3Bpbm5lcnMgPSBjYWxjRm9ybS5xdWVyeVNlbGVjdG9yQWxsKCcuY2FsYy1jdXN0b20tc3BpbicpO1xuXG4gICAgICAgIGN1c3RvbVNwaW5uZXJzLmZvckVhY2goKHNwaW5uZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW0gPSBzcGlubmVyLnF1ZXJ5U2VsZWN0b3IoJy5naW5wdXRfY29udGFpbmVyX251bWJlcicpO1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBzcGlubmVyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHVwQXJyb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICB1cEFycm93LmNsYXNzTmFtZSA9ICdzcGluLWFycm93cyB1cCc7XG4gICAgICAgICAgICBlbGVtLnByZXBlbmQodXBBcnJvdyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRvd25BcnJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgIGRvd25BcnJvdy5jbGFzc05hbWUgPSAnc3Bpbi1hcnJvd3MgZG93bic7XG4gICAgICAgICAgICBlbGVtLmFwcGVuZChkb3duQXJyb3cpO1xuXG4gICAgICAgICAgICBkb3duQXJyb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbCA9IHBhcnNlQ3VycmVuY3lUb0NlbnRzKGZpZWxkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWwgPSBjdXJyZW50VmFsIC0gNTAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdFZhbCA9IGZvcm1hdENlbnRzQXNDdXJyZW5jeShuZXdWYWwpO1xuICAgICAgICAgICAgICAgIGlmIChuZXdWYWwgPiBmaWVsZC5taW4gKiAxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBmb3JtYXRWYWw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBmb3JtYXRDZW50c0FzQ3VycmVuY3koZmllbGQubWluICogMTAwKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudCgnY2hhbmdlJyk7XG4gICAgICAgICAgICAgICAgZmllbGQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdXBBcnJvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsID0gcGFyc2VDdXJyZW5jeVRvQ2VudHMoZmllbGQudmFsdWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IGN1cnJlbnRWYWwgKyA1MDA7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0VmFsID0gZm9ybWF0Q2VudHNBc0N1cnJlbmN5KG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgaWYgKG5ld1ZhbCA8IGZpZWxkLm1heCAqIDEwMCkge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZvcm1hdFZhbDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZvcm1hdENlbnRzQXNDdXJyZW5jeShmaWVsZC5tYXggKiAxMDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudCgnY2hhbmdlJyk7XG4gICAgICAgICAgICAgICAgZmllbGQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZmllbGQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHBhcnNlQ3VycmVuY3lUb0NlbnRzKGZpZWxkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAobmV3VmFsID4gZmllbGQubWF4ICogMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZm9ybWF0Q2VudHNBc0N1cnJlbmN5KGZpZWxkLm1heCAqIDEwMCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50KCdjaGFuZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG5ld1ZhbCA8IGZpZWxkLm1pbiAqIDEwMCkge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZvcm1hdENlbnRzQXNDdXJyZW5jeShmaWVsZC5taW4gKiAxMDApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudCgnY2hhbmdlJyk7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgY29uc3QgcGFyc2VDdXJyZW5jeVRvQ2VudHMgPSAoY3VycmVuY3lTdHIpID0+IHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBjdXJyZW5jeSBzeW1ib2xzIGFuZCB3aGl0ZXNwYWNlXG4gICAgICAgICAgICBsZXQgY2xlYW5TdHIgPSBjdXJyZW5jeVN0ci5yZXBsYWNlKC9bJFxcc10vZywgJycpO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggZm9ybWF0IGlzIGJlaW5nIHVzZWRcbiAgICAgICAgICAgIGlmIChjbGVhblN0ci5pbmNsdWRlcygnLCcpICYmIGNsZWFuU3RyLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBib3RoIHNlcGFyYXRvcnMgZXhpc3QsIGNoZWNrIHdoaWNoIGNvbWVzIGZpcnN0XG4gICAgICAgICAgICAgICAgY29uc3QgY29tbWFQb3MgPSBjbGVhblN0ci5pbmRleE9mKCcsJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZG90UG9zID0gY2xlYW5TdHIuaW5kZXhPZignLicpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hUG9zIDwgZG90UG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZvcm1hdDogMSwyMzQuNTZcbiAgICAgICAgICAgICAgICAgICAgY2xlYW5TdHIgPSBjbGVhblN0ci5yZXBsYWNlKC8sL2csICcnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBGb3JtYXQ6IDEuMjM0LDU2XG4gICAgICAgICAgICAgICAgICAgIGNsZWFuU3RyID0gY2xlYW5TdHIucmVwbGFjZSgvXFwuL2csICcnKS5yZXBsYWNlKCcsJywgJy4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNsZWFuU3RyLmluY2x1ZGVzKCcsJykpIHtcbiAgICAgICAgICAgICAgICAvLyBKdXN0IGNvbW1hIC0gY291bGQgYmUgZGVjaW1hbCBvciB0aG91c2FuZHNcbiAgICAgICAgICAgICAgICBpZiAoY2xlYW5TdHIubGFzdEluZGV4T2YoJywnKSA+IGNsZWFuU3RyLmxlbmd0aCAtIDQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29tbWEgaXMgZGVjaW1hbCBzZXBhcmF0b3JcbiAgICAgICAgICAgICAgICAgICAgY2xlYW5TdHIgPSBjbGVhblN0ci5yZXBsYWNlKCcsJywgJy4nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBDb21tYSBpcyB0aG91c2FuZHMgc2VwYXJhdG9yXG4gICAgICAgICAgICAgICAgICAgIGNsZWFuU3RyID0gY2xlYW5TdHIucmVwbGFjZSgvLC9nLCAnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDb252ZXJ0IHRvIGZsb2F0IGFuZCB0aGVuIHRvIGNlbnRzXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChwYXJzZUZsb2F0KGNsZWFuU3RyKSAqIDEwMCk7XG4gICAgICAgIH07XG5cblxuICAgICAgICBjb25zdCBmb3JtYXRDZW50c0FzQ3VycmVuY3kgPSAoY2VudHMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgJCR7KGNlbnRzIC8gMTAwKS50b0ZpeGVkKDIpfWA7XG4gICAgICAgIH07XG5cbiAgICB9XG59IiwiLyogZXNsaW50LWRpc2FibGUgbGluZWJyZWFrLXN0eWxlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tY3ljbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbi8qIGVzbGludC1kaXNhYmxlIGxpbmVicmVhay1zdHlsZSAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbW9yZUNhc2VTdHVkaWVzKGFqYXgpIHtcbiAgICBjb25zdCAkb3RoZXIgPSBqUXVlcnkoJy5qcy1vdGhlci1jYXNlLXN0dWRpZXMnKTtcbiAgICBsZXQgJG9mZnNldCA9ICRvdGhlci5kYXRhKCdvZmZzZXQnKTtcbiAgICBjb25zdCAkbG9hZE1vcmUgPSBqUXVlcnkoJy5qcy1sb2FkLW1vcmUtY2FzZS1zdHVkaWVzJyk7XG4gICAgY29uc3QgJHBhZ2luYXRpb24gPSBqUXVlcnkoJy5qcy1wYWdpbmF0aW9uLWNhc2Utc3R1ZGllcycpO1xuICAgIGNvbnN0ICRwZXJQYWdlID0gJG90aGVyLmRhdGEoJ3BlcnBhZ2UnKTtcbiAgICBjb25zdCAkZm91bmRQb3N0cyA9ICRvdGhlci5kYXRhKCdmb3VuZC1wb3N0cycpO1xuICAgIGNvbnN0ICRjYXNlU3R1ZGllcyA9ICRvdGhlci5kYXRhKCdjYXNlLXN0dWRpZXMnKTtcbiAgXG4gICAgLyogVGhpcyBzaG91bGQgYmVnaW4gYXQgcG9zdHNfcGVyX3BhZ2UgdmFsdWUgdGhpcyBpcyBzcGVjaWZpYyBmb3IgdGhpcyBzZWN0aW9uIG9ubHkgKi9cbiAgICBsZXQgdG90YWxDb3VudCA9IDk7XG4gIFxuICAgIC8vIGFuaW1hdGVkIGNsYXNzXG4gICAgY29uc3QgJGFuaW1hdGVkQ2xhc3MgPSAnbG9hZG1vcmUtYW5pbWF0ZWQnO1xuICBcbiAgICBmdW5jdGlvbiBnZXRfcG9zdHMob2Zmc2V0ID0gMCwgcG9zdHNfcGVyX3BhZ2UgPSA5LCBjYXRlZ29yeV9pZCA9IG51bGwsIGZpbHRlciA9IGZhbHNlKSB7XG4gICAgICAkbG9hZE1vcmUuYWRkQ2xhc3MoJ2xvYWRpbmcnKTtcbiAgICAgIGpRdWVyeS5hamF4KHtcbiAgICAgICAgdXJsOiBgJHthamF4LmFkbWluX3VybH0/YWN0aW9uPW1vcmVfY2FzZV9zdHVkaWVzYCxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICBwb3N0c19wZXJfcGFnZSxcbiAgICAgICAgICBjYXNlX3N0dWRpZXM6ICRjYXNlU3R1ZGllcyxcbiAgICAgICAgICBhamF4OiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBzdWNjZXNzKHJlc3BvbnNlKSB7XG4gICAgICAgICAgalF1ZXJ5KCcuanMtbWVzc2FnZS1jYXNlLXN0dWRpZXMnKS5odG1sKG51bGwpO1xuICBcbiAgICAgICAgICBpZiAocmVzcG9uc2UgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyBpbmNyZW1lbnQgdG90YWwgY291bnRcbiAgICAgICAgICAgIHRvdGFsQ291bnQgKz0gcmVzcG9uc2UuY291bnQ7XG4gIFxuICAgICAgICAgICAgaWYgKGZpbHRlcikgeyAkb3RoZXIuaHRtbChudWxsKTsgfVxuICAgICAgICAgICAgJG90aGVyLmFwcGVuZChyZXNwb25zZS5vdXRwdXQpLmFuaW1hdGUoeyBvcGFjaXR5OiAxIH0sIDIwMCwgKCkgPT4ge1xuICAgICAgICAgICAgICBqUXVlcnkoYC4keyRhbmltYXRlZENsYXNzfWApLmFuaW1hdGUoeyBvcGFjaXR5OiAxIH0sIDIwMCk7XG4gICAgICAgICAgICAgIGpRdWVyeShgLiR7JGFuaW1hdGVkQ2xhc3N9YCkuZWFjaCgoaSwgb2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgalF1ZXJ5KG9iaikucmVtb3ZlQ2xhc3MoYC4keyRhbmltYXRlZENsYXNzfWApO1xuICBcbiAgICAgICAgICAgICAgICBjb25zdCAkbW9yZURhdGEgPSBqUXVlcnkoJy5qc0Nhc2VTdHVkaWVzTG9hZGVkTW9yZScpO1xuICAgICAgICAgICAgICAgIGNvbnN0ICRtYWluQ29udCA9IGpRdWVyeSgnLmpzTWFpbkNvbnQnKTtcbiAgXG4gICAgICAgICAgICAgICAgJG1haW5Db250LmFwcGVuZCgkbW9yZURhdGEuaHRtbCgpKTtcbiAgICAgICAgICAgICAgICAkbW9yZURhdGEucmVtb3ZlKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAkbG9hZE1vcmUucmVtb3ZlQ2xhc3MoJ2xvYWRpbmcnKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5jb3VudCA9PT0gMFxuICAgICAgICAgICAgICAgIHx8IHJlc3BvbnNlLmNvdW50IDwgcG9zdHNfcGVyX3BhZ2VcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgJGxvYWRNb3JlLmhpZGUoKTtcbiAgICAgICAgICAgICAgJHBhZ2luYXRpb24uaGlkZSgpO1xuICAgICAgICAgICAgICAkb3RoZXIucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgXG4gICAgICAgICAgaWYgKHJlc3BvbnNlID09PSBmYWxzZSB8fCByZXNwb25zZS5vdXRwdXQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAkbG9hZE1vcmUuaGlkZSgpO1xuICAgICAgICAgICAgJHBhZ2luYXRpb24uaGlkZSgpO1xuICAgICAgICAgICAgJG90aGVyLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcbiAgICAgICAgICAgIC8vIGpRdWVyeSgnLmpzLW1lc3NhZ2UtY2FzZS1zdHVkaWVzJykuaHRtbCgnTm8gTW9yZSBQb3N0cycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgXG4gICAgJGxvYWRNb3JlLm9uKCdjbGljaycsIChlKSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIFxuICAgICAgJG9mZnNldCArPSAkb3RoZXIuZGF0YSgncGVycGFnZScpO1xuICAgICAgZ2V0X3Bvc3RzKCRvZmZzZXQsICRwZXJQYWdlKTtcbiAgICB9KTtcbiAgfVxuICAiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjYXNlU3R1ZHlUYWJzKCkge1xuICAgIGNvbnN0ICRjYXNlVGFicyA9IGpRdWVyeShcIi5qcy1jYXNlLXN0dWR5LXRhYnNcIik7XG5cbiAgICBpZigkY2FzZVRhYnMubGVuZ3RoID4gMCkge1xuICAgICAgICAkY2FzZVRhYnMuZWFjaChmdW5jdGlvbihpLCBvYmopIHtcbiAgICAgICAgICAgIGNvbnN0ICR0aGlzID0galF1ZXJ5KHRoaXMpO1xuXG4gICAgICAgICAgICAvLyB0YWJzIHBhbmVsIGNsaWNrXG4gICAgICAgICAgICBjb25zdCAkdGFic1BhbmVsID0gJHRoaXMuZmluZChcIi5qcy10YWJzLW5hdi1pdGVtXCIpO1xuXG4gICAgICAgICAgICAkdGFic1BhbmVsLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGNvbnN0ICR0YWJJdGVtID0galF1ZXJ5KHRoaXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhYkl0ZW1JbmRleCA9ICR0YWJJdGVtLmF0dHIoJ2RhdGEtaW1nLWluZGV4Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgJHRhYiA9ICR0YWJJdGVtLnBhcmVudHMoXCIuanMtdGFiXCIpO1xuICAgICAgICAgICAgICAgIGlmKCR0YWIuZmluZChgLmpzLWltZy10YWJbZGF0YS10YWItaW5kZXg9JyR7dGFiSXRlbUluZGV4fSddYCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCAkaW1nU3JjID0gJHRhYi5maW5kKGAuanMtaW1nLXRhYltkYXRhLXRhYi1pbmRleD0nJHt0YWJJdGVtSW5kZXh9J11gKS5hdHRyKCdkYXRhLXNyYycpO1xuXG4gICAgICAgICAgICAgICAgICAgICR0aGlzLmZpbmQoJy5sLXRibmF2LXYxX19pbWcnKS5hbmltYXRlKHsgb3BhY2l0eTogMCB9LCAyMDAsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMuZmluZCgnLmpzLWxlZnQtaW1nJykuYXR0cihcInNyY1wiLCAkaW1nU3JjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLmZpbmQoJy5qcy1sZWZ0LWltZycpLmF0dHIoXCJkYXRhLXNyY1wiLCAkaW1nU3JjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLmZpbmQoJy5sLXRibmF2LXYxX19pbWcnKS5hbmltYXRlKHsgb3BhY2l0eTogMSB9LCAyMDApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG59XG4iLCJmdW5jdGlvbiBjYWxjdWxhdGUoKSB7XG4gIC8qKlxuICAgKiBHZXR0aW5nIGFsbCBuZWNlc3Nhcnkgc3R1ZmYuXG4gICAqL1xuICBjb25zdCBjYWxjID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLWNvbnYtY2FsY3VsYXRvcicpO1xuICBjb25zdCByZXN1bHRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLWNvbnYtcmVzdWx0cycpO1xuICBjb25zdCBjb252ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2pzLWNvbnYtZmllbGQnKTtcbiAgY29uc3QgdmlzaXRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2pzLXZpc2l0cy1maWVsZCcpO1xuICBjb25zdCBhbnN3ZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtYW5zd2VyJyk7XG4gIGNvbnN0IGdvb2QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtZ29vZCcpO1xuICBjb25zdCBiYWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtYmFkJyk7XG4gIGNvbnN0IGNhbGNBZ2FpbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qcy1jYWxjLWFnYWluJyk7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZmluYWwgcmVzdWx0LlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgbGV0IHJlc3VsdCA9IE51bWJlcigoKGNvbnYudmFsdWUgLyB2aXNpdHMudmFsdWUpICogMTAwKS50b0ZpeGVkKDIpKTtcblxuICAvKipcbiAgICogSGlkaW5nIGNhbGN1bGF0b3IsIHNob3dpbmcgcmVzdWx0cyBhbmQgcG9wdWxhdGluZyByZXN1bHRzIGRpdi5cbiAgICovXG4gIGNhbGMuY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7XG4gIHJlc3VsdHMuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gIGFuc3dlci5pbm5lckhUTUwgPSBgJHtyZXN1bHR9JWA7XG5cbiAgaWYgKE51bWJlcihjb252LnZhbHVlKSAmJiBOdW1iZXIodmlzaXRzLnZhbHVlKSkge1xuICAgIHdpbmRvdy5kYXRhTGF5ZXIgPSB3aW5kb3cuZGF0YUxheWVyIHx8IFtdO1xuICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaCh7XG4gICAgICAnZXZlbnQnOiAnY29udmVyc2lvbl9jYWxjdWxhdG9yX2Zvcm0nLFxuICAgICAgJ2NvbnZlcnNpb25zJzogY29udi52YWx1ZSxcbiAgICAgICd2aXNpdHMnOiB2aXNpdHMudmFsdWUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHdoaWNoIHJlc3VsdCB0byBzaG93IGdvb2Qgb3IgYmFkLlxuICAgKi9cbiAgc3dpdGNoICh0cnVlKSB7XG4gICAgY2FzZSByZXN1bHQgPiA3OlxuICAgICAgZ29vZC5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgcmVzdWx0IDwgNzpcbiAgICAgIGJhZC5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgcmVzdWx0ID09PSA3OlxuICAgICAgZ29vZC5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICAgIGJhZC5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgYWdhaW4gZnVuY3Rpb24gcmVzZXR0aW5nIGlucHV0cyBhbmQgaGlkaW5nIHJlc3VsdHMuXG4gICAqL1xuICBpZiAoY2FsY0FnYWluKSB7XG4gICAgY2FsY0FnYWluLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgY2FsYy5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICAgIHJlc3VsdHMuY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7XG4gICAgICBnb29kLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgICAgYmFkLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgICAgY29udi52YWx1ZSA9ICcnO1xuICAgICAgdmlzaXRzLnZhbHVlID0gJyc7XG4gICAgICByZXN1bHQgPSAwO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogTWFpbiBmdW5jdGlvbiBpbmNsdWRlZCBpbiBpbmRleC5qcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udmVyc2lvbnNDYWxjdWxhdG9yKCkge1xuICAvKipcbiAgICogQ2FsbGluZyBjYWxjdWxhdGUgb24gY2xpY2sgb24gZm9ybSBzdWJtaXRcbiAgICovXG4gIGNvbnN0IGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udi1jYWxjJyk7XG5cbiAgaWYgKGZvcm0pIHtcbiAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIChlKSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGNhbGN1bGF0ZSgpO1xuICAgIH0pO1xuICB9XG5cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBleHBhbmRJbWFnZSgpIHtcblxuICAgICQoXCIuYmEtZXhwYW5kZXIgLmMtcXotYnRuXCIpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAkKHRoaXMpLmNsaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRyaWdnZXJFeHBhbmRJbWFnZSgkKHRoaXMpKTtcbiAgICAgICAgfSlcbiAgICB9KTtcblxuICAgIGNvbnN0IGN1cnJlbnRVcmxIYXNoID0gJChsb2NhdGlvbikucHJvcCgnaGFzaCcpLnN1YnN0cigxKTtcbiAgICBjb25zdCB0YWJzID0gJCgnLmJhLXNpbmdsZSAuanMtdGFicy1wYW5lbCcpO1xuXG4gICAgdGFicy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdGFiID0gJCh0aGlzKTtcbiAgICAgICAgY29uc3QgcHJvamVjdHMgPSB0YWIuZmluZCgnLmJhLXNpbmdsZV9fcHJvamVjdCcpO1xuICAgICAgICBjb25zdCB0YWJzSUQgPSB0YWIuYXR0cignaWQnKTtcbiAgICAgICAgY29uc3QgdGFiTmF2SXRlbUNvbnRyb2xzID0gJCgnLmJhLXNpbmdsZSAuanMtdGFicy1uYXYtaXRlbVthcmlhLWNvbnRyb2xzPScrIHRhYnNJRCArICddJyk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRVcmxIYXNoKSB7XG4gICAgICAgICAgICBjbG9zZVRhYnModGFiLCB0YWJOYXZJdGVtQ29udHJvbHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvamVjdHMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgcHJvamVjdEhhc2ggPSAkKHRoaXMpLmZpbmQoJy5iYS1zaW5nbGVfX3Byb2plY3QtaGFzaCcpLmF0dHIoJ25hbWUnKTtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRVcmxIYXNoID09IHByb2plY3RIYXNoKSB7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcubG0tY29sJykuYWRkQ2xhc3MoJ29uJyk7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcubG0tY29sJykucHJldkFsbCgpLmFkZENsYXNzKCdvbicpO1xuICAgICAgICAgICAgICAgIGlmKHRhYnNJRCA9PSAkKHRoaXMpLmZpbmQoJy5jLXF6LWJ0bicpLmNsb3Nlc3QoJy5qcy10YWJzLXBhbmVsJykuYXR0cignaWQnKSkge1xuICAgICAgICAgICAgICAgICAgICBvcGVuVGFiKHRhYiwgdGFiTmF2SXRlbUNvbnRyb2xzKTtcblxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLmMtcXotYnRuJykuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTUwMCk7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKFwiLmMtaW1hZ2VcIikuY3NzKCdtYXgtaGVpZ2h0JywgJ25vbmUnKVxuICAgICAgICAgICAgICAgICAgICB9LCAyMTAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gY2xvc2VUYWJzKHRhYiwgdGFiTmF2SXRlbUNvbnRyb2xzKSB7XG4gICAgICAgIHRhYi5yZW1vdmVDbGFzcygnaXMtYWN0aXZlJyk7XG4gICAgICAgIHRhYi5hdHRyKCdhcmlhLWhpZGRlbicsICdmYWxzZScpO1xuICAgICAgICB0YWJOYXZJdGVtQ29udHJvbHMucmVtb3ZlQ2xhc3MoJ2lzLWFjdGl2ZScpO1xuICAgICAgICB0YWJOYXZJdGVtQ29udHJvbHMuYXR0cignYXJpYS1zZWxlY3RlZCcsICdmYWxzZScpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9wZW5UYWIodGFiLCB0YWJOYXZJdGVtQ29udHJvbHMpIHtcbiAgICAgICAgdGFiLmFkZENsYXNzKCdpcy1hY3RpdmUnKTtcbiAgICAgICAgdGFiLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ3R1cmUnKTtcbiAgICAgICAgdGFiTmF2SXRlbUNvbnRyb2xzLmFkZENsYXNzKCdpcy1hY3RpdmUnKTtcbiAgICAgICAgdGFiTmF2SXRlbUNvbnRyb2xzLmF0dHIoJ2FyaWEtc2VsZWN0ZWQnLCAndHVyZScpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRyaWdnZXJFeHBhbmRJbWFnZSh0cmlnZ2VyKSB7XG5cbiAgICAgICAgbGV0IGV4cGFuZGVycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5iYS1zaW5nbGVfX3Byb2plY3QgLmJhLWV4cGFuZGVyJyk7XG4gICAgICAgIGxldCB0cmlnZ2VySHJlZiA9IHRyaWdnZXJbMF0uZGF0YXNldC51cmw7XG5cbiAgICAgICAgZXhwYW5kZXJzLmZvckVhY2goKGV4cGFuZGVyc0J0bikgPT4ge1xuXG4gICAgICAgICAgICBpZiAoZXhwYW5kZXJzQnRuLmlkID09PSB0cmlnZ2VySHJlZikge1xuXG4gICAgICAgICAgICAgICAgbGV0IGV4cGFuZGVyc0J0blByZXYgPSBleHBhbmRlcnNCdG4ucHJldmlvdXNFbGVtZW50U2libGluZztcblxuICAgICAgICAgICAgICAgIGV4cGFuZGVyc0J0blByZXYucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJvblwiKTtcblxuICAgICAgICAgICAgICAgIGxldCBoZWlnaHQgPSBleHBhbmRlcnNCdG4ucHJldmlvdXNFbGVtZW50U2libGluZy5xdWVyeVNlbGVjdG9yKFwiLmMtaW1hZ2VfX21lZGlhXCIpLm9mZnNldEhlaWdodDtcblxuICAgICAgICAgICAgICAgIGV4cGFuZGVyc0J0blByZXYuc3R5bGUubWF4SGVpZ2h0ID0gaGVpZ2h0KydweCc7XG4gICAgICAgICAgICAgICAgZXhwYW5kZXJzQnRuUHJldi5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJpcy1leHBhbmRlZFwiKTtcbiAgICAgICAgICAgICAgICBleHBhbmRlcnNCdG4ucXVlcnlTZWxlY3RvcihcIi5jLWJ0blwiKS5jbGFzc0xpc3QuYWRkKFwib25cIik7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kZXJzQnRuUHJldi5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLnBhcmVudEVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe30pO1xuICAgICAgICAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRyaWdnZXIuaGFzQ2xhc3MoXCJvblwiKSkge1xuICAgICAgICAgICAgdHJpZ2dlci5wYXJlbnQoKS5wcmV2KCkuY3NzKCdtYXgtaGVpZ2h0JywgJycpO1xuICAgICAgICAgICAgdHJpZ2dlci5yZW1vdmVDbGFzcyhcIm9uXCIpO1xuICAgICAgICAgICAgdHJpZ2dlci5wYXJlbnQoKS5wYXJlbnQoKS5yZW1vdmVDbGFzcyhcImlzLWV4cGFuZGVkXCIpO1xuICAgICAgICAgICAgdHJpZ2dlci5wYXJlbnQoKS5wcmV2KCkuZ2V0KDApLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0gdHJpZ2dlci5wYXJlbnQoKS5wcmV2KCkuZmluZChcIi5jLWltYWdlX19tZWRpYVwiKS5vdXRlckhlaWdodCgpO1xuICAgICAgICAgICAgdHJpZ2dlci5wYXJlbnQoKS5wcmV2KCkuY3NzKCdtYXgtaGVpZ2h0JywgaGVpZ2h0KTtcbiAgICAgICAgICAgIHRyaWdnZXIuYWRkQ2xhc3MoXCJvblwiKTtcbiAgICAgICAgICAgIHRyaWdnZXIucGFyZW50KCkucGFyZW50KCkuYWRkQ2xhc3MoXCJpcy1leHBhbmRlZFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qIFRPQyBjb2xsYXBzZXIgKi9cblxuICAgIGxldCBjb2xsYXBzZXJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmJhLXRvY19fdGl0bGUnKTtcblxuICAgIGlmIChjb2xsYXBzZXJzKSB7XG4gICAgICAgIGNvbGxhcHNlcnMuZm9yRWFjaCgoY29sbGFwc2VyKSA9PiB7XG4gICAgICAgICAgICBjb2xsYXBzZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbGxhcHNlci5jbGFzc0xpc3QudG9nZ2xlKCdpcy1hY3RpdmUnKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgICAvLyBGdW5jdGlvbiB0byBzY3JvbGwgdXAgYnkgYW1vdW50XG4gICAgIGZ1bmN0aW9uIHNjcm9sbFVwQnkoYW1vdW50KSB7XG4gICAgICAgICQoJy5tZW51LW91dHNpZGUnKS5hbmltYXRlKHtcbiAgICAgICAgICAgIHNjcm9sbFRvcDogJCgnLm1lbnUtb3V0c2lkZScpLnNjcm9sbFRvcCgpICsgYW1vdW50XG4gICAgICAgIH0sIDgwMCk7IC8vIDgwMG1zIGR1cmF0aW9uIGZvciB0aGUgc2Nyb2xsIGFuaW1hdGlvblxuICAgIH1cblxuICAgIC8vICBMb2FkIG1vcmVcbiAgICAkKFwiLmxtLWJhXCIpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAkKHRoaXMpLmNsaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCQoJy5tZW51LW91dHNpZGUnKS5zY3JvbGxUb3AoKSk7XG4gICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5sbS1jb2wnKS5uZXh0KCkuYWRkQ2xhc3MoJ29uJyk7XG4gICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5jLWJ0bl9fd3JhcCcpLmFkZENsYXNzKFwiZnJycmNcIik7XG4gICAgICAgICAgICBzY3JvbGxVcEJ5KDIwMCk7XG4gICAgICAgIH0pXG4gICAgfSk7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gZmFrZUZvb3Rlck1lbnUoKSB7XG4gIGxldCBmYWtlTWVudSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZW51LWZvb3Rlci1tZW51LWpzJyk7XG4gIGlmIChmYWtlTWVudSkge1xuICAgIGZha2VNZW51LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2xpY2spO1xuICAgIGZha2VNZW51LmFkZEV2ZW50TGlzdGVuZXIoJ2F1eGNsaWNrJywgaGFuZGxlQXV4Q2xpY2spO1xuICAgIGZha2VNZW51LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgaGFuZGxlQ29udGV4dE1lbnUpO1xuICB9XG4gIGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnRhcmdldC50YWdOYW1lID09PSAnQScpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB2YXIgdXJsID0gZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1tYXNrLWxpbmsnKTtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xuICAgIH1cbiAgfVxuICBcbiAgZnVuY3Rpb24gaGFuZGxlQXV4Q2xpY2soZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgPT09ICdBJyAmJiBldmVudC5idXR0b24gPT09IDEpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB2YXIgdXJsID0gZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1tYXNrLWxpbmsnKTtcbiAgICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xuICAgIH1cbiAgfVxuICBcbiAgZnVuY3Rpb24gaGFuZGxlQ29udGV4dE1lbnUoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgPT09ICdBJykge1xuICAgICAgdmFyIHVybCA9IGV2ZW50LnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWFzay1saW5rJyk7XG4gICAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcbiAgICB9XG4gIH1cbn0iLCJleHBvcnQgZnVuY3Rpb24gZm9vdEFjY29yZGlvbigpIHtcbiAgIFxuICAgIFxuICAgIFxuICAgIGlmICgkKHdpbmRvdykud2lkdGgoKSA8IDU3NSkge1xuICAgICAgICBcbiAgICAgICAgJChcIi50ZW1wLWFjY29yZGlvbiAud2lkZ2V0dGl0bGVcIikuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkKHRoaXMpLm9uKCd0b3VjaHN0YXJ0JyxmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCAkKHRoaXMpLmhhc0NsYXNzKCdhY3RpdmUnKSkge1xuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKS5uZXh0KCkucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpXG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICQoXCIud2lkZ2V0dGl0bGVcIikucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpLm5leHQoKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2FjdGl2ZScpLm5leHQoKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgfVxuICAgICBlbHNlIHtcbiAgICAgICAgJChcIi53aWRnZXR0aXRsZVwiKS5yZW1vdmVDbGFzcygnYWN0aXZlJykubmV4dCgpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGZvb3RlckhvdmVyKCkge1xuXG4gICAgJChcIi5mb290ZXItbmF2ID4gLm1lbnUtaXRlbVwiKS5lYWNoKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpZiAoJChcIi5mb290ZXItbmF2ID4gLm1lbnUtaXRlbVwiKS5oYXNDbGFzcyhcImN1cnJlbnQtbWVudS1wYXJlbnRcIikpIHtcblxuICAgICAgICAgICAgJChcIi5mb290ZXItbmF2ID4gLmN1cnJlbnQtbWVudS1wYXJlbnRcIikuYWRkQ2xhc3MoJ2lzLWhvdmVyJyk7XG5cbiAgICAgICAgICAgICQoXCIuZm9vdGVyLW5hdlwiKS5tb3VzZWxlYXZlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAkKFwiLmZvb3Rlci1uYXYgPiAuY3VycmVudC1tZW51LXBhcmVudFwiKS5hZGRDbGFzcygnaXMtaG92ZXInKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICQoXCIuZm9vdGVyLW5hdiA+IC5tZW51LWl0ZW06Zmlyc3QtY2hpbGRcIikuYWRkQ2xhc3MoJ2lzLWhvdmVyJyk7XG5cbiAgICAgICAgICAgICQoXCIuZm9vdGVyLW5hdlwiKS5tb3VzZWxlYXZlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAkKFwiLmZvb3Rlci1uYXYgPiAubWVudS1pdGVtOmZpcnN0LWNoaWxkXCIpLmFkZENsYXNzKCdpcy1ob3ZlcicpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAkKHRoaXMpLm1vdXNlZW50ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnaXMtaG92ZXInKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJCh0aGlzKS5tb3VzZWxlYXZlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICQoXCIuZm9vdGVyLW5hdiA+IC5tZW51LWl0ZW1cIikucmVtb3ZlQ2xhc3MoJ2lzLWhvdmVyJylcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBnRm9ybXMoKSB7XG5cblxuICAgIGlmICgkKFwiLmZvcm0tc2VjdGlvbjpub3QoLi1jb250YWN0KVwiKS5sZW5ndGgpIHtcbiAgICAgICAgJChcIi5mb3JtLXNlY3Rpb24gLmZvcm0tc2VjdGlvbl9faW5uZXIgLmdmb3JtX2J1dHRvblwiKS53cmFwKFwiPHNwYW4gY2xhc3M9J2MtYnRuIC1wcmltYXJ5LXYzJz48L3NwYW4+XCIpXG5cbiAgICAgICAgdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2Zvcm1fd3JhcHBlcl83Jyk7XG4gICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAkKFwiLmZvcm0tc2VjdGlvbiAuZm9ybS1zZWN0aW9uX19pbm5lciAuZ2Zvcm1fYnV0dG9uXCIpLndyYXAoXCI8c3BhbiBjbGFzcz0nYy1idG4gLXByaW1hcnktdjMnPjwvc3Bhbj5cIilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGUsIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydjbGFzcyddLFxuICAgICAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhOiBmYWxzZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICB2YXIgbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnZm9ybV93cmFwcGVyXzEwJyk7XG4gICAgICAgIGlmIChtKSB7XG4gICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAkKFwiLmZvcm0tc2VjdGlvbiAuZ2Zvcm1fYnV0dG9uXCIpLndyYXAoXCI8c3BhbiBjbGFzcz0nYy1idG4gLXByaW1hcnktdjMnPjwvc3Bhbj5cIilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKG0sIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydjbGFzcyddLFxuICAgICAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhOiBmYWxzZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICgkKFwiLi1jb250YWN0XCIpLmxlbmd0aCkge1xuXG4gICAgICAgICQoXCIuLWNvbnRhY3QgLmdmb3JtX2J1dHRvblwiKS53cmFwKFwiPHNwYW4gY2xhc3M9J2MtYnRuIC1wcmltYXJ5LXYzIC1kYXJrJz48L3NwYW4+XCIpXG5cbiAgICAgICAgdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2Zvcm1fd3JhcHBlcl83Jyk7XG4gICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAkKFwiLi1jb250YWN0IC5nZm9ybV9idXR0b25cIikud3JhcChcIjxzcGFuIGNsYXNzPSdjLWJ0biAtcHJpbWFyeS12MyAtZGFyayc+PC9zcGFuPlwiKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZSwge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlRmlsdGVyOiBbJ2NsYXNzJ10sXG4gICAgICAgICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGNoYXJhY3RlckRhdGE6IGZhbHNlXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIHZhciBlMiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnZm9ybV93cmFwcGVyXzQnKTtcbiAgICAgICAgaWYgKGUyKSB7XG4gICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAkKFwiLi1jb250YWN0IC5nZm9ybV9idXR0b25cIikud3JhcChcIjxzcGFuIGNsYXNzPSdjLWJ0biAtcHJpbWFyeS12MyAtZGFyayc+PC9zcGFuPlwiKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZTIsIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydjbGFzcyddLFxuICAgICAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhOiBmYWxzZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICgkKFwiLndoaXRlcGFwZXJcIikubGVuZ3RoKSB7XG4gICAgICAgICQoXCIud2hpdGVwYXBlciAuZ2Zvcm1fYnV0dG9uXCIpLndyYXAoXCI8c3BhbiBjbGFzcz0nd3BjZjctc3VibWl0IGMtYnRuIC1ibHVlLWdyYWQgLWljb24tc3ByZWFkJz48L3NwYW4+XCIpXG4gICAgICAgICQoXCIud2hpdGVwYXBlciAuZ2Zvcm1fZm9vdGVyIC5jLWJ0blwiKS5hcHBlbmQoJzxzcGFuIGNsYXNzPVwiYy1idG5fX2ljby12MlwiPjxzdmcgY2xhc3M9XCJpY29uIGljb24tYnRuLWFycm93IFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHJvbGU9XCJpbWdcIj48dXNlIHhsaW5rOmhyZWY9XCIjbGliLWljb24tYXJyb3czXCI+PC91c2U+PC9zdmc+PC9zcGFuPicpXG5cbiAgICAgICAgdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2Zvcm1fd3JhcHBlcl85Jyk7XG4gICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAkKFwiLndoaXRlcGFwZXIgLmdmb3JtX2J1dHRvblwiKS53cmFwKFwiPHNwYW4gY2xhc3M9J3dwY2Y3LXN1Ym1pdCBjLWJ0biAtYmx1ZS1ncmFkIC1pY29uLXNwcmVhZCc+PC9zcGFuPlwiKVxuICAgICAgICAgICAgICAgICQoXCIud2hpdGVwYXBlciAuZ2Zvcm1fZm9vdGVyIC5jLWJ0blwiKS5hcHBlbmQoJzxzcGFuIGNsYXNzPVwiYy1idG5fX2ljby12MlwiPjxzdmcgY2xhc3M9XCJpY29uIGljb24tYnRuLWFycm93IFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHJvbGU9XCJpbWdcIj48dXNlIHhsaW5rOmhyZWY9XCIjbGliLWljb24tYXJyb3czXCI+PC91c2U+PC9zdmc+PC9zcGFuPicpXG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGUsIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydjbGFzcyddLFxuICAgICAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhOiBmYWxzZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICgkKFwiLm5ld3NsZXR0ZXItZm9ybVwiKS5sZW5ndGgpIHtcbiAgICAgICAgJChcIi5uZXdzbGV0dGVyLWZvcm0gLmdmb3JtX2J1dHRvblwiKS53cmFwKFwiPHNwYW4gY2xhc3M9J3dwY2Y3LXN1Ym1pdCBjLWJ0biAtYmx1ZS1ncmFkIC1pY29uLXNwcmVhZCc+PC9zcGFuPlwiKVxuICAgICAgICB2YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnZm9ybV93cmFwcGVyXzYnKTtcbiAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgIHZhciBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICAgICQoXCIubmV3c2xldHRlci1mb3JtIC5nZm9ybV9idXR0b25cIikud3JhcChcIjxzcGFuIGNsYXNzPSd3cGNmNy1zdWJtaXQgYy1idG4gLWJsdWUtZ3JhZCAtaWNvbi1zcHJlYWQnPjwvc3Bhbj5cIilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGUsIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydjbGFzcyddLFxuICAgICAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhOiBmYWxzZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICgkKFwiLmR0LXN1YnNjcmliZV9fYm90dG9tXCIpLmxlbmd0aCkge1xuICAgICAgICAkKFwiLmR0LXN1YnNjcmliZV9fYm90dG9tIC5nZm9ybV9idXR0b25cIikud3JhcChcIjxzcGFuIGNsYXNzPSdjLWJ0biAtcHJpbWFyeS12MyAtZGFyayc+PC9zcGFuPlwiKVxuICAgICAgICB2YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnZm9ybV93cmFwcGVyXzgnKTtcbiAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgIHZhciBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICAgICQoXCIuZHQtc3Vic2NyaWJlX19ib3R0b20gLmdmb3JtX2J1dHRvblwiKS53cmFwKFwiPHNwYW4gY2xhc3M9J2MtYnRuIC1wcmltYXJ5LXYzIC1kYXJrJz48L3NwYW4+XCIpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShlLCB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsnY2xhc3MnXSxcbiAgICAgICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgY2hhcmFjdGVyRGF0YTogZmFsc2VcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiAoJChcIi5zaW5nbGUtcG9zdF9fY29udGVudCAuZm9ybS1zZWN0aW9uXCIpLmxlbmd0aCkge1xuICAgIC8vICAgICAkKFwiLnNpbmdsZS1wb3N0X19jb250ZW50IC5mb3JtLXNlY3Rpb24gIC5nZm9ybV9idXR0b25cIikud3JhcChcIjxzcGFuIGNsYXNzPSd3cGNmNy1zdWJtaXQgYy1idG4gLW9wYWNpdHknPjwvc3Bhbj5cIik7XG5cbiAgICAvLyAgICAgdmFyIGUyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dmb3JtX3dyYXBwZXJfMTAnKTtcbiAgICAvLyAgICAgaWYoZTIpe1xuICAgIC8vICAgICAgICAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gICAgICAgICAgICAgJChcIi5zaW5nbGUtcG9zdF9fY29udGVudCAuZm9ybS1zZWN0aW9uICAuZ2Zvcm1fYnV0dG9uXCIpLndyYXAoXCI8c3BhbiBjbGFzcz0nd3BjZjctc3VibWl0IGMtYnRuIC1vcGFjaXR5Jz48L3NwYW4+XCIpO1xuICAgIC8vICAgICAgICAgfSlcbiAgICAvLyAgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZSwge1xuICAgIC8vICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsIFxuICAgIC8vICAgICAgICAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydjbGFzcyddLFxuICAgIC8vICAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSwgXG4gICAgLy8gICAgICAgICAgICAgY2hhcmFjdGVyRGF0YTogZmFsc2VcbiAgICAvLyAgICAgICAgIH0pXG4gICAgLy8gICAgIH0gXG4gICAgLy8gfVxuXG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBsaW5lYnJlYWstc3R5bGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIGZ1bmMtbmFtZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuXG4vLyBjb25zdCAkdmlkZW9Db250ID0galF1ZXJ5KCcuanMtaGVyby12aWRlby1jb250Jyk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGhlcm9QbGF5ZXIoc2VsZWN0b3IpIHtcbiAgY29uc3QgdlRhZ3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcblxuICBmdW5jdGlvbiB2aWRlb1JXRCgpIHtcbiAgICB2VGFncy5mb3JFYWNoKCh2VGFnKSA9PiB7XG4gICAgICBpZiAoalF1ZXJ5KHZUYWcpLmlzKCc6aGlkZGVuJykpIHtcbiAgICAgICAgdlRhZy5hdXRvcGxheSA9ICF2VGFnLmF1dG9wbGF5O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyogQ3VzdG9tIFZpZGVvIENvbnRyb2xzICovXG4gIGZ1bmN0aW9uIHZpZGVvQWN0aW9ucygpIHtcbiAgICB2VGFncy5mb3JFYWNoKCh2VGFnKSA9PiB7XG4gICAgICBjb25zdCAkdmlkZW9Db250ID0galF1ZXJ5KHZUYWcpLnBhcmVudHMoJy5qcy12aWRlby1zZWN0aW9uJykuZmluZCgnLmpzLWhlcm8tdmlkZW8tY29udCcpO1xuICAgICAgLy8gdmFuaWxsYSBqcyBjb250XG4gICAgICBjb25zdCB2aWRlb0NvbnQgPSAkdmlkZW9Db250LmdldCgwKTtcblxuICAgICAgY29uc3QgcGxheUFjdGlvbiA9ICR2aWRlb0NvbnQuZmluZCgnLmJ0bi1wbGF5JykuZ2V0KDApO1xuICAgICAgY29uc3QgbXV0ZUFjdGlvbiA9ICR2aWRlb0NvbnQuZmluZCgnLmJ0bi1tdXRlJykuZ2V0KDApO1xuICAgICAgY29uc3QgY29udHJvbEFjdGlvbiA9ICR2aWRlb0NvbnQuZmluZCgnLmJ0bi1jb250cm9sJykuZ2V0KDApO1xuICAgICAgdlRhZy5jb250cm9scyA9IGZhbHNlO1xuXG4gICAgICB2VGFnLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgIC8vIHZUYWcucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpcy1lbmRlZCcpO1xuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudmlkZW8taGlkZGVuJykuY2xhc3NMaXN0LnJlbW92ZSgnaXMtZW5hYmxlZCcpO1xuICAgICAgICAvLyAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5iYW5uZXItdG9wJykuY2xhc3NMaXN0LnJlbW92ZSgnaXMtZGlzYWJsZWQnKTtcbiAgICAgICAgdlRhZy5jdXJyZW50VGltZSA9IDA7XG4gICAgICAgIHBsYXlBY3Rpb24uY2xhc3NMaXN0LmFkZCgnaXMtcGF1c2UnKTtcbiAgICAgICAgcGxheUFjdGlvbi5jbGFzc0xpc3QucmVtb3ZlKCdpcy1wbGF5aW5nJyk7XG4gICAgICB9LCBmYWxzZSk7XG5cbiAgICAgIC8vIHBhdXNlIHZpZGVvIGJlb3JlIGVuZCAgYW5kIGFkZCBjb250YWN0IGxpbmtcbiAgICAgIHZUYWcuYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFRpbWUgPj0gNjEpIHtcbiAgICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFRpbWUgPj0gNTgpIHtcbiAgICAgICAgICB2aWRlb0NvbnQucXVlcnlTZWxlY3RvcignLmludmlkZW8tbGluaycpLmNsYXNzTGlzdC5hZGQoJ3Nob3cnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2aWRlb0NvbnQucXVlcnlTZWxlY3RvcignLmludmlkZW8tbGluaycpLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTtcbiAgICAgICAgfVxuICAgICAgfSwgZmFsc2UpO1xuXG4gICAgICBmdW5jdGlvbiB0b2dnbGVQbGF5KCkge1xuICAgICAgICBpZiAodlRhZy5wYXVzZWQgfHwgdlRhZy5lbmRlZCkge1xuICAgICAgICAgIHBsYXlBY3Rpb24uY2xhc3NMaXN0LmFkZCgnaXMtcGxheWluZycpO1xuICAgICAgICAgIHBsYXlBY3Rpb24uY2xhc3NMaXN0LnJlbW92ZSgnaXMtcGF1c2UnKTtcbiAgICAgICAgICB2VGFnLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaXMtZW5kZWQnKTtcbiAgICAgICAgICB2VGFnLnBsYXkoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwbGF5QWN0aW9uLmNsYXNzTGlzdC5hZGQoJ2lzLXBhdXNlJyk7XG4gICAgICAgICAgcGxheUFjdGlvbi5jbGFzc0xpc3QucmVtb3ZlKCdpcy1wbGF5aW5nJyk7XG4gICAgICAgICAgdlRhZy5wYXVzZSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHRvZ2dsZU11dGUoKSB7XG4gICAgICAgIHZUYWcubXV0ZWQgPSAhdlRhZy5tdXRlZDtcbiAgICAgICAgaWYgKHZUYWcubXV0ZWQpIHtcbiAgICAgICAgICBtdXRlQWN0aW9uLmNsYXNzTGlzdC5hZGQoJ2lzLW11dGVkJyk7XG4gICAgICAgICAgbXV0ZUFjdGlvbi5jbGFzc0xpc3QucmVtb3ZlKCdpcy1zb3VuZCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG11dGVBY3Rpb24uY2xhc3NMaXN0LmFkZCgnaXMtc291bmQnKTtcbiAgICAgICAgICBtdXRlQWN0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLW11dGVkJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHRvZ2dsZUNvbnRyb2woKSB7XG4gICAgICAgIGlmIChjb250cm9sQWN0aW9uKSB7XG4gICAgICAgICAgdlRhZy5jb250cm9scyA9ICF2VGFnLmNvbnRyb2xzO1xuICAgICAgICAgIGlmICh2VGFnLmNvbnRyb2xzKSB7XG4gICAgICAgICAgICBjb250cm9sQWN0aW9uLmNsYXNzTGlzdC5hZGQoJ2lzLW11dGVkJyk7XG4gICAgICAgICAgICBjb250cm9sQWN0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLXNvdW5kJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRyb2xBY3Rpb24uY2xhc3NMaXN0LmFkZCgnaXMtc291bmQnKTtcbiAgICAgICAgICAgIGNvbnRyb2xBY3Rpb24uY2xhc3NMaXN0LnJlbW92ZSgnaXMtbXV0ZWQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcGxheUFjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgdG9nZ2xlUGxheSgpO1xuICAgICAgfSk7XG4gICAgICBtdXRlQWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICB0b2dnbGVNdXRlKCk7XG4gICAgICB9KTtcbiAgICAgIGlmIChjb250cm9sQWN0aW9uKSB7XG4gICAgICAgIGNvbnRyb2xBY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgdG9nZ2xlQ29udHJvbCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIFBsYXkgYnV0dG9uIG9uIHRoZSBzZXJ2aWNlcyBwYWdlc1xuXG4gIGZ1bmN0aW9uIHBsYXlWaWRlbyhlbCkge1xuICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGVsKS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwbGF5QnRucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZWwpO1xuXG4gICAgICBwbGF5QnRucy5mb3JFYWNoKChwbGF5QnRuKSA9PiB7XG4gICAgICAgIHBsYXlCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2xpY2tcIik7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBjb25zdCAkdmlkZW9Db250ID0galF1ZXJ5KGUudGFyZ2V0KS5wYXJlbnRzKCcuanMtdmlkZW8tc2VjdGlvbicpLmZpbmQoJy5qcy1oZXJvLXZpZGVvLWNvbnQnKTtcblxuICAgICAgICAgICR2aWRlb0NvbnQuYWRkQ2xhc3MoJ2lzLWVuYWJsZWQnKTtcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2hpZGUtc2Nyb2xsYmFyJyk7XG4gICAgICAgICAgJHZpZGVvQ29udC5hbmltYXRlKHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgICAgfSwgNTAwKTtcblxuICAgICAgICAgICR2aWRlb0NvbnQuZmluZCgnLnZpZGVvUGxheWVyIC5qcy1zb3VyY2UxJykucHJvcCgnc3JjJywgalF1ZXJ5KHBsYXlCdG4pLmRhdGEoJ3ZpZGVvLXVybCcpKTtcbiAgICAgICAgICAkdmlkZW9Db250LmZpbmQoJy52aWRlb1BsYXllciAuanMtc291cmNlMicpLnByb3AoJ3NyYycsIGpRdWVyeShwbGF5QnRuKS5kYXRhKCd2aWRlby11cmwnKSk7XG5cbiAgICAgICAgICBjb25zdCB2VGFnID0gJHZpZGVvQ29udC5maW5kKCcudmlkZW9QbGF5ZXInKS5nZXQoMCk7XG4gICAgICAgICAgXG4gICAgICAgICAgdlRhZy5sb2FkKCk7XG4gICAgICAgICAgdlRhZy5wbGF5KCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RvcFZpZGVvKGVsKSB7XG4gICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZWwpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNsb3NlQnRucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZWwpO1xuXG4gICAgICBjbG9zZUJ0bnMuZm9yRWFjaCgoY2xvc2VCdG4pID0+IHtcbiAgICAgICAgY2xvc2VCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgY29uc3QgJHZpZGVvQ29udCA9IGpRdWVyeShlLnRhcmdldCkucGFyZW50cygnLmpzLXZpZGVvLXNlY3Rpb24nKS5maW5kKCcuanMtaGVyby12aWRlby1jb250Jyk7XG5cbiAgICAgICAgICAkdmlkZW9Db250LnJlbW92ZUNsYXNzKCdpcy1lbmFibGVkJyk7XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdoaWRlLXNjcm9sbGJhcicpO1xuXG4gICAgICAgICAgJHZpZGVvQ29udC5hbmltYXRlKHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgfSwgNTAwKTtcblxuICAgICAgICAgIGNvbnN0IHZUYWcgPSAkdmlkZW9Db250LmZpbmQoJy52aWRlb1BsYXllcicpLmdldCgwKTtcblxuICAgICAgICAgIHZUYWcucGF1c2UoKTtcbiAgICAgICAgICB2VGFnLmN1cnJlbnRUaW1lID0gMDtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBpZiAodlRhZ3MubGVuZ3RoID4gMCkge1xuICAgIHZpZGVvUldEKCk7XG4gICAgdmlkZW9BY3Rpb25zKCk7XG5cbiAgICBwbGF5VmlkZW8oJy5qcy1wbGF5LXZpZGVvJyk7XG4gICAgc3RvcFZpZGVvKCcuanMtc3RvcC12aWRlbycpO1xuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gbG9hZE1vcmVQcm9qZWN0cyhhamF4KSB7XG5cbiAgICAgICAgJCgnI2xvYWRfbW9yZV9wcm9qZWN0cycpLm9uKCAnY2xpY2snLCAoZSkgPT4ge1xuXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBjb25zdCBidXR0b24gPSAkKCcjbG9hZF9tb3JlX3Byb2plY3RzJyk7XG4gICAgICAgICAgICBjb25zdCB2aXNpYmxlID0gYnV0dG9uLmF0dHIoJ2RhdGEtdmlzaWJsZScpO1xuICAgICAgICAgICAgY29uc3QgdG90YWwgPSBidXR0b24uYXR0cignZGF0YS10b3RhbCcpO1xuICAgICAgICAgICAgY29uc3QgbG9hZE1vcmUgPSBidXR0b24uYXR0cignZGF0YS1sb2FkX21vcmUnKTtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gYnV0dG9uLmF0dHIoJ2RhdGEtaWQnKTtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RTZWN0aW9uID0gJCgnI3Byb2plY3QtbGlzdCcpO1xuICAgICAgICAgICAgY29uc3QgcHJvamVjdHNKc29uID0gbGlzdFNlY3Rpb24uZGF0YSgncHJvamVjdHMnKTtcblxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocHJvamVjdHNKc29uKTtcblxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdtb3JlX2Jsb2dfcHJvamVjdHMnLFxuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIHZpc2libGUsXG4gICAgICAgICAgICAgICAgbG9hZE1vcmUsXG4gICAgICAgICAgICAgICAgcHJvamVjdHNKc29uXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDogYWpheC5hZG1pbl91cmwsICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uICh4aHIpIHtcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmFkZENsYXNzKCdsb2FkaW5nJyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKGxpc3RTZWN0aW9uKS5hcHBlbmQoZGF0YS5vdXRwdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmF0dHIoJ2RhdGEtdmlzaWJsZScsIGRhdGEudmlzaWJsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b24ucmVtb3ZlQ2xhc3MoJ2xvYWRpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnZpc2libGUgPj0gdG90YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgIH0pO1xuXG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9hZE1vcmVTb2x1dGlvbnMoKSB7XG4gICAgY29uc3QgdGFic1BhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmpzLWxvYWQtbW9yZS1jb250ZW50Jyk7XG4gICAgY29uc3QgbG9hZE1vcmVCdG5zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmpzLWxvYWQtbW9yZS1zb2x1dGlvbnMnKTtcbiAgICBjb25zdCB0YWJzTmF2SXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuanMtbG9hZC1tb3JlLW5hdi1pdGVtJyk7XG4gICAgY29uc3Qgc2VsZWN0TmF2SXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuanMtbG9hZC1tb3JlLWRyb3Bkb3duJylcblxuICAgIHRhYnNQYW5lbC5mb3JFYWNoKChwYW5lbCkgPT4ge1xuICAgICAgICBsZXQgYm94ZXMgPSBwYW5lbC5xdWVyeVNlbGVjdG9yQWxsKCcubC10ZWFtX19pdGVtJyk7XG5cbiAgICAgICAgbG9hZE1vcmVCdG5zLmZvckVhY2goKGxvYWRNb3JlQnRuKSA9PiB7XG4gICAgICAgICAgICB0YWJzTmF2SXRlbXMuZm9yRWFjaCh0YWJzTmF2SXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgdGFic05hdkl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGJveGVzLmZvckVhY2goKGJveCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRTdGF0ZShib3gsIGxvYWRNb3JlQnRuKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgc2VsZWN0TmF2SXRlbXMuZm9yRWFjaChzZWxlY3ROYXZJdGVtID0+IHtcbiAgICAgICAgICAgICAgICBzZWxlY3ROYXZJdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYm94ZXMuZm9yRWFjaCgoYm94KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldFN0YXRlKGJveCwgbG9hZE1vcmVCdG4pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBsb2FkTW9yZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgICAgICBib3hlcy5mb3JFYWNoKChib3gpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlclN0YXRlKGJveCwgcGFuZWwsIGxvYWRNb3JlQnRuKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFRyaWdnZXIgbG9hZCBtb3JlIHN0YXRlIGFuZCBzaG93IGFsbCBpdGVtc1xuICAgIGZ1bmN0aW9uIHRyaWdnZXJTdGF0ZShpdGVtLCBwYW5lbCwgYnRuKSB7XG4gICAgICAgIGl0ZW0uY2xhc3NMaXN0LnRvZ2dsZSgnLXNob3cnKTtcblxuICAgICAgICBpZiAoaXRlbS5jbGFzc0xpc3QuY29udGFpbnMoJy1zaG93JykpIHtcbiAgICAgICAgICAgIGJ0bi5xdWVyeVNlbGVjdG9yKCcuanMtbG9hZC1tb3JlLXR4dCcpLmlubmVySFRNTCA9IFwiSGlkZSBFeGFtcGxlc1wiO1xuICAgICAgICAgICAgYnRuLmNsYXNzTGlzdC5hZGQoJ2V4cGFuZGVkJylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhbmVsLnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjogJ2luc3RhbnQnLCBibG9jazogJ3N0YXJ0J30pO1xuICAgICAgICAgICAgYnRuLnF1ZXJ5U2VsZWN0b3IoJy5qcy1sb2FkLW1vcmUtdHh0JykuaW5uZXJIVE1MID0gYnRuLnF1ZXJ5U2VsZWN0b3IoJy5qcy1sb2FkLW1vcmUtdHh0JykuZGF0YXNldC5sYWJlbDtcbiAgICAgICAgICAgIGJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdleHBhbmRlZCcpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXNldCBsb2FkIG1vcmUgc3RhdGUgYW5kIGhpZGUgc2hvd24gaXRlbXNcbiAgICBmdW5jdGlvbiByZXNldFN0YXRlKGl0ZW0sIGJ0bikge1xuICAgICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJy1zaG93Jyk7XG4gICAgICAgIGJ0bi5xdWVyeVNlbGVjdG9yKCcuanMtbG9hZC1tb3JlLXR4dCcpLmlubmVySFRNTCA9IGJ0bi5xdWVyeVNlbGVjdG9yKCcuanMtbG9hZC1tb3JlLXR4dCcpLmRhdGFzZXQubGFiZWw7XG4gICAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGxvY2F0aW9uQWNjb3JkaW9uKCkge1xuXG4gICAgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5qcy1sb2NhdGlvblwiKSAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGFjY29yZGlvbkl0ZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmpzLWxvY2F0aW9uLWl0ZW1cIik7XG4gICAgICAgIGFjY29yZGlvbkl0ZW0uZm9yRWFjaCgoaXRlbSxpbmRleCk9PntcbiAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGl0ZW0uY2xhc3NMaXN0LnRvZ2dsZShcImFjdGl2ZVwiKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IGRlc2NyaXB0aW9uID0gaXRlbS5xdWVyeVNlbGVjdG9yKFwiLmpzLWxvY2F0aW9uLWl0ZW0tY29udGVudFwiKTtcbiAgICAgICAgICAgIGlmKGl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKXtcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb24uc3R5bGUuaGVpZ2h0PVwiYXV0b1wiO1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbi5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbi5zdHlsZS5vcGFjaXR5ID0gXCIxXCI7XG4gICAgICAgICAgICAgIH0sIDQwMCk7XG4gICAgXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbi5zdHlsZS5oZWlnaHQgPSBcIjBweFwiO1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLnN0eWxlLm9wYWNpdHkgPSBcIjBcIjtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbi5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZW1vdmVPcGVuZWRDb250ZW50KGluZGV4KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSlcbiAgICAgICAgICBcbiAgICAgICAgICBmdW5jdGlvbiByZW1vdmVPcGVuZWRDb250ZW50KGluZGV4KXtcbiAgICAgICAgICAgIGFjY29yZGlvbkl0ZW0uZm9yRWFjaCgoaXRlbTIsaW5kZXgyKT0+e1xuICAgICAgICAgICAgICBpZihpbmRleCAhPSBpbmRleDIpe1xuICAgICAgICAgICAgICAgIGl0ZW0yLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG4gICAgICAgICAgICAgICAgbGV0IGRlc2NyaXAgPSBpdGVtMi5xdWVyeVNlbGVjdG9yKFwiLmpzLWxvY2F0aW9uLWl0ZW0tY29udGVudFwiKTtcbiAgICAgICAgICAgICAgICBkZXNjcmlwLnN0eWxlLmhlaWdodD1cIjBweFwiO1xuICAgICAgICAgICAgICAgIGRlc2NyaXAuc3R5bGUub3BhY2l0eSA9IFwiMFwiO1xuICAgICAgICAgICAgICAgIGRlc2NyaXAuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gbG9nb1NsaWRlcigpIHtcbiAgICB2YXIgbG9nb1NsaWRlciA9ICQoXCIuanMtc2xpZGVyLXNpbXBsZS1jMVwiKTtcbiAgICAgICAgaWYobG9nb1NsaWRlci5sZW5ndGgpe1xuICAgICAgICBmdW5jdGlvbiBoYW5kbGVTbGlkZXJJbnRlcnNlY3Rpb24oZW50cmllcywgb2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIGVudHJpZXMuZm9yRWFjaChlbnRyeSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBTbGlkZXJDbGllbnRMb2dvcyA9IG5ldyBTd2lwZXIoXCIuanMtc2xpZGVyLXNpbXBsZS1jMVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiBcImF1dG9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNlbnRlcmVkU2xpZGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9vcDp0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VCZXR3ZWVuOiAzMixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9wbGF5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZU9uSW50ZXJhY3Rpb246IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRGb3JUcmFuc2l0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWVkOiA4MDAwXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBTbGlkZXJDbGllbnRMb2dvc1JldiA9IG5ldyBTd2lwZXIoXCIuanMtc2xpZGVyLXNpbXBsZS1jMlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiBcImF1dG9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNlbnRlcmVkU2xpZGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9vcDp0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VCZXR3ZWVuOiAzMixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9wbGF5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZU9uSW50ZXJhY3Rpb246IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRGb3JUcmFuc2l0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWVkOiA4MDAwXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIENyZWF0ZSBhbiBpbnRlcnNlY3Rpb24gb2JzZXJ2ZXIgaW5zdGFuY2VcbiAgICAgICAgdmFyIG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGhhbmRsZVNsaWRlckludGVyc2VjdGlvbiwgeyB0aHJlc2hvbGQ6IDAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBTZWxlY3QgYWxsIGJ1dHRvbnMgdG8gb2JzZXJ2ZVxuICAgICAgICBcbiAgICAgICAgbG9nb1NsaWRlci5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzKTsgLy8gU3RhcnQgb2JzZXJ2aW5nIGVhY2ggYnV0dG9uXG4gICAgICAgIH0pO1xuXG4gICAgfVxufSIsImV4cG9ydCBmdW5jdGlvbiBtZW51SG92ZXIoKXtcbiAgICAgIC8vIFNlbGVjdCBhbGwgbWVudSBpdGVtcyBhdCB0aGUgZmlyc3QgbGV2ZWxcbiAgICAgIGNvbnN0IG1lbnVJdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5uYXYtbWFpbl9fbGlua3MgPiBsaSAgPiBhID4gLm1lbnUtaXRlbS10aXRsZScpO1xuXG4gICAgICAvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBtZW51IGl0ZW1cbiAgICAgIG1lbnVJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAvLyBHZXQgdGhlIHRleHQgY29udGVudCBvZiB0aGUgbWVudSBpdGVtXG4gICAgICAgIGNvbnN0IHRleHQgPSBpdGVtLnRleHRDb250ZW50O1xuXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBzdHJpbmcgd2l0aCBlYWNoIGxldHRlciAoaW5jbHVkaW5nIHNwYWNlcykgd3JhcHBlZCBpbiBhIHNwYW5cbiAgICAgICAgbGV0IG5ld0NvbnRlbnQgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGV4dFtpXSA9PT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgbmV3Q29udGVudCArPSBgPHNwYW4gY2xhc3M9XCJzcGFjZVwiPiR7dGV4dFtpXX08L3NwYW4+YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3Q29udGVudCArPSBgPHNwYW4+JHt0ZXh0W2ldfTwvc3Bhbj5gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IHRoZSBuZXcgY29udGVudCB0byB0aGUgb3JpZ2luYWwgaXRlbVxuICAgICAgICBpdGVtLmlubmVySFRNTCA9IG5ld0NvbnRlbnQ7XG5cbiAgICAgICAgLy8gQ2xvbmUgdGhlIGl0ZW0gYW5kIGFkZCB0aGUgJ2RvdWJsZScgY2xhc3NcbiAgICAgICAgY29uc3QgY2xvbmVkSXRlbSA9IGl0ZW0uY2xvbmVOb2RlKHRydWUpO1xuICAgICAgICBjbG9uZWRJdGVtLmNsYXNzTGlzdC5hZGQoJ2RvdWJsZScpO1xuXG4gICAgICAgIC8vIEluc2VydCB0aGUgY2xvbmVkIGl0ZW0gYWZ0ZXIgdGhlIG9yaWdpbmFsIGl0ZW1cbiAgICAgICAgaXRlbS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjbG9uZWRJdGVtLCBpdGVtLm5leHRTaWJsaW5nKTtcbiAgICAgIH0pO1xufSAiLCJleHBvcnQgZnVuY3Rpb24gcGF1c2VIZXJvQW5pbWF0aW9ucygpIHtcblxuICAgIGNvbnN0IGVsZW1lbnRzVG9PYnNlcnZlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmhvbWUtaGVybyAubS1iYW5uZXJfX2NvbnRlbnQgLCAuaG9tZS1oZXJvIC4tY2xpZW50LXNsaWRlcycpO1xuICBcbiAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcbiAgICBlbnRyaWVzLmZvckVhY2goZW50cnkgPT4ge1xuICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICAgIC8vIEVsZW1lbnQgaXMgaW4gdGhlIHZpZXdwb3J0LCByZW1vdmUgdGhlICdwYXVzZWQnIGNsYXNzXG4gICAgICAgIGVudHJ5LnRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCdwYXVzZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEVsZW1lbnQgaXMgbm90IGluIHRoZSB2aWV3cG9ydCwgYWRkIHRoZSAncGF1c2VkJyBjbGFzc1xuICAgICAgICBlbnRyeS50YXJnZXQuY2xhc3NMaXN0LmFkZCgncGF1c2VkJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHtcbiAgICB0aHJlc2hvbGQ6IDBcbiAgfSk7XG5cbiAgZWxlbWVudHNUb09ic2VydmUuZm9yRWFjaChlbGVtZW50ID0+IG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCkpO1xufSIsImV4cG9ydCBmdW5jdGlvbiBwcm9ncmVzc0JhclNjcm9sbCgpIHtcbiAgICBjb25zdCBiYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2luZ2xlUHJvZ3Jlc3NCYXInKTtcblxuICAgIGlmIChiYXIpIHtcbiAgICAgICAgZnVuY3Rpb24gcHJvZ3Jlc3NCYXIoKSB7XG4gICAgICAgICAgICBsZXQgd2luU2Nyb2xsID0gZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCxcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCxcbiAgICAgICAgICAgICAgICBzY3JvbGxlZCA9ICh3aW5TY3JvbGwgLyBoZWlnaHQpICogMTAwO1xuICAgICAgICAgICAgYmFyLnN0eWxlLndpZHRoID0gc2Nyb2xsZWQgKyBcIiVcIjtcbiAgICAgICAgfTtcblxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4ge1xuICAgICAgICAgICAgcHJvZ3Jlc3NCYXIoKTtcbiAgICAgICAgfSlcbiAgICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVhZE1vcmVYKCkge1xuXG4gICAgLy8gQ29kZSByZWxldmFudCB0byB0aGUgaW5kdXN0cnktc2VydmljZXMucGhwIG1vZHVsZVxuICAgIGNvbnN0IHRhYkhlYWRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmpzLXRhYi1oZWFkJyk7XG5cbiAgICB0YWJIZWFkcy5mb3JFYWNoKHRhYkhlYWQgPT4ge1xuICAgICAgICB0YWJIZWFkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgYWN0aXZhdGVUYWIodGFiSGVhZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRhYkhlYWQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmF0ZVRhYih0YWJIZWFkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBhY3RpdmF0ZVRhYih0YWJIZWFkKSB7XG4gICAgICAgIHRhYkhlYWRzLmZvckVhY2gob3RoZXJUYWJIZWFkID0+IHtcbiAgICAgICAgICAgIG90aGVyVGFiSGVhZC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1hY3RpdmUnKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBvdGhlclRhYkhlYWQucXVlcnlTZWxlY3RvcignLmMtYmxvY2tfX3RleHQtd3JhcCcpO1xuICAgICAgICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICBjb250ZW50LmNsYXNzTGlzdC5hZGQoJy1oaWRkZW4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGFiSGVhZC5jbGFzc0xpc3QuYWRkKCdpcy1hY3RpdmUnKTtcbiAgICAgICAgY29uc3QgYWN0aXZlQ29udGVudCA9IHRhYkhlYWQucXVlcnlTZWxlY3RvcignLmMtYmxvY2tfX3RleHQtd3JhcCcpOyBcbiAgICAgICAgaWYgKGFjdGl2ZUNvbnRlbnQpIHtcbiAgICAgICAgICAgIGFjdGl2ZUNvbnRlbnQuY2xhc3NMaXN0LnJlbW92ZSgnLWhpZGRlbicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ29kZSByZWxldmFudCB0byB0aGUgd3JhcHBlci1jb250ZW50LnBocCBtb2R1bGVcbiAgICBjb25zdCBidXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmZ1bGwtYmxvY2sgLmMtYnRuJyk7XG5cbiAgICBidXR0b25zLmZvckVhY2goYnV0dG9uID0+IHtcbiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZnVsbEJsb2NrID0gdGhpcy5jbG9zZXN0KCcuZnVsbC1ibG9jaycpO1xuICAgICAgICAgICAgY29uc3QgY29sbGFwc2FibGUgPSBmdWxsQmxvY2sucXVlcnlTZWxlY3RvcignLmNvbGxhcHNhYmxlLnJlYWQtbW9yZS10ZXh0Jyk7XG5cbiAgICAgICAgICAgIC8vIFRvZ2dsZSB0aGUgLWhpZGRlbiBjbGFzcyBvbiB0aGUgY29sbGFwc2FibGUgZWxlbWVudFxuICAgICAgICAgICAgY29sbGFwc2FibGUuY2xhc3NMaXN0LnRvZ2dsZSgnLWhpZGRlbicpO1xuXG4gICAgICAgICAgICAvLyBUb2dnbGUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvblxuICAgICAgICAgICAgY29uc3QgYnV0dG9uVGV4dCA9IHRoaXMucXVlcnlTZWxlY3RvcignLi10ZXh0Jyk7XG4gICAgICAgICAgICBidXR0b25UZXh0LnRleHRDb250ZW50ID0gY29sbGFwc2FibGUuY2xhc3NMaXN0LmNvbnRhaW5zKCctaGlkZGVuJykgPyAnQ2xpY2sgVG8gUmVhZCBGdWxsIEFydGljbGUnIDogJ0hpZGUgQXJ0aWNsZSc7XG5cbiAgICAgICAgICAgIC8vIFRvZ2dsZSB0aGUgLWFjdGl2ZSBjbGFzcyBvbiB0aGUgYnV0dG9uXG4gICAgICAgICAgICB0aGlzLmNsYXNzTGlzdC50b2dnbGUoJy1hY3RpdmUnKTtcblxuICAgICAgICAgICAgLy8gU2Nyb2xsIGludG8gdmlldyBpZiB0aGUgY29sbGFwc2FibGUgZWxlbWVudCBpcyBoaWRkZW5cbiAgICAgICAgICAgIGlmIChjb2xsYXBzYWJsZS5jbGFzc0xpc3QuY29udGFpbnMoJy1oaWRkZW4nKSkge1xuICAgICAgICAgICAgICAgIGZ1bGxCbG9jay5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6ICdpbnN0YW50JywgYmxvY2s6ICdzdGFydCd9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn07IiwiZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbGVyMjQgKCl7XG4gICAgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5vdXItcHJvY2VzczI0XCIpICE9IG51bGwpe1xuICAgICAgICBjb25zdCBzY3JvbGxlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zY3JvbGxlcicpO1xuICAgICAgICBjb25zdCBpbm5lclNjcm9sbGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNjcm9sbGVyX19pbm5lcicpO1xuICAgICAgICBjb25zdCBzbGlkZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2Nyb2xsLXNsaWRlJyk7XG4gICAgICAgIGNvbnN0IHNsaWRlV2lkdGggPSBzbGlkZXNbMF0ub2Zmc2V0V2lkdGg7IC8vIEFzc3VtaW5nIGFsbCBzbGlkZXMgaGF2ZSB0aGUgc2FtZSB3aWR0aFxuICAgICAgICBsZXQgc2Nyb2xsUG9zaXRpb24gPSAwO1xuICAgICAgICBsZXQgbWF4U2Nyb2xsID0gaW5uZXJTY3JvbGxlci5zY3JvbGxXaWR0aCAtIHNjcm9sbGVyLmNsaWVudFdpZHRoO1xuICAgICAgICBsZXQgbGFzdFNjcm9sbFBvc2l0aW9uID0gMDsgLy8gVG8gdHJhY2sgdGhlIGxhc3Qgc2Nyb2xsIHBvc2l0aW9uXG4gICAgICAgIGNvbnN0IHByb2dyZXNzQmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnByb2dyZXNzJyk7XG5cbiAgICAgICAgLy8gRnVuY3Rpb24gdG8gZGV0ZWN0IGlmIHRoZSBkZXZpY2UgaXMgdG91Y2gtY2FwYWJsZVxuICAgICAgICBmdW5jdGlvbiBpc1RvdWNoRGV2aWNlKCkge1xuICAgICAgICByZXR1cm4gJ29udG91Y2hzdGFydCcgaW4gd2luZG93IHx8IG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDAgfHwgbmF2aWdhdG9yLm1zTWF4VG91Y2hQb2ludHMgPiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc2Nyb2xsVG9NaWRkbGUoc2xpZGVJbmRleCkge1xuICAgICAgICBjb25zdCBzY3JvbGxlckNlbnRlciA9ICgoc2Nyb2xsZXIuY2xpZW50V2lkdGggLyAxMCkgKiAzLjUpO1xuICAgICAgICBjb25zdCBzbGlkZUNlbnRlciA9IHNsaWRlSW5kZXggKiBzbGlkZVdpZHRoICsgc2xpZGVXaWR0aCAvIDI7XG4gICAgICAgIGNvbnN0IG5ld1Njcm9sbFBvc2l0aW9uID0gc2xpZGVDZW50ZXIgLSBzY3JvbGxlckNlbnRlcjtcblxuICAgICAgICAvLyBDbGFtcCBuZXcgc2Nyb2xsIHBvc2l0aW9uIHRvIHByZXZlbnQgb3ZlcnNjcm9sbGluZ1xuICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IE1hdGgubWF4KDAsIE1hdGgubWluKG5ld1Njcm9sbFBvc2l0aW9uLCBtYXhTY3JvbGwpKTtcbiAgICAgICAgaW5uZXJTY3JvbGxlci5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgtJHtzY3JvbGxQb3NpdGlvbn1weClgO1xuICAgICAgICBcbiAgICAgICAgaWYoc2xpZGVJbmRleCA8IDEpe1xuICAgICAgICAgICAgcHJvZ3Jlc3NCYXIuc3R5bGUucmlnaHQgID0gYCR7c2xpZGVXaWR0aCAqIDEuNX1weGA7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcHJvZ3Jlc3NCYXIuc3R5bGUucmlnaHQgID0gYCR7KHNjcm9sbFBvc2l0aW9uIC0gKHNsaWRlV2lkdGggLyAxLjIpKSAqIC0xfXB4YDtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhzbGlkZUluZGV4KTtcbiAgICAgICAgLy8gQWRkIGFjdGl2ZSBjbGFzcyB0byBjbGlja2VkIHNsaWRlIGFuZCBhbGwgcHJldmlvdXMgc2xpZGVzXG4gICAgICAgIHNsaWRlcy5mb3JFYWNoKChzbGlkZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA8PSBzbGlkZUluZGV4KSB7XG4gICAgICAgICAgICBzbGlkZS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzbGlkZS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cblxuICAgICAgICBsYXN0U2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNUb3VjaERldmljZSgpKSB7XG4gICAgICAgIC8vIE1vdXNlIHdoZWVsIGV2ZW50IGZvciBob3Jpem9udGFsIHNjcm9sbGluZyB3aXRoIHRyYW5zZm9ybVxuICAgICAgICBzY3JvbGxlci5hZGRFdmVudExpc3RlbmVyKCd3aGVlbCcsIChlKSA9PiB7XG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgbmV3IHNjcm9sbCBwb3NpdGlvbiBiYXNlZCBvbiBkZWx0YVlcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbEFtb3VudCA9IGUuZGVsdGFZO1xuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gc2Nyb2xsQW1vdW50ID4gMCA/IDEgOiAtMTsgLy8gMSBmb3IgZG93biAobGVmdCBzY3JvbGwpLCAtMSBmb3IgdXAgKHJpZ2h0IHNjcm9sbClcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ1Njcm9sbCA9IG1heFNjcm9sbCAtIHNjcm9sbFBvc2l0aW9uO1xuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBzY3JvbGwgcG9zaXRpb25cbiAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uICs9IGRpcmVjdGlvbiAqIDcwOyAvLyBBZGp1c3QgbXVsdGlwbGllciBmb3Igc2Nyb2xsIHNwZWVkXG5cbiAgICAgICAgICAgIC8vIENsYW1wIHNjcm9sbCBwb3NpdGlvbiB0byBwcmV2ZW50IG92ZXJzY3JvbGxpbmdcbiAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsUG9zaXRpb24sIG1heFNjcm9sbCkpO1xuXG4gICAgICAgICAgICAvLyBVcGRhdGUgdHJhbnNmb3JtIHN0eWxlIHdpdGggdGhlIGNvcnJlY3Qgc2Nyb2xsIHBvc2l0aW9uXG4gICAgICAgICAgICBpbm5lclNjcm9sbGVyLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKC0ke3Njcm9sbFBvc2l0aW9ufXB4KWA7XG4gICAgICAgICAgICBcblxuICAgICAgICAgICAgLy8gUHJldmVudCBkZWZhdWx0IHdoZWVsIGFjdGlvbiBpZiB3ZSdyZSBzY3JvbGxpbmcgaG9yaXpvbnRhbGx5XG4gICAgICAgICAgICBpZiAoc2Nyb2xsUG9zaXRpb24gIT09IDAgJiYgc2Nyb2xsUG9zaXRpb24gIT09IG1heFNjcm9sbCkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBbGxvdyBub3JtYWwgdmVydGljYWwgc2Nyb2xsaW5nIGlmIGF0IHRoZSBzdGFydCBvciBlbmRcbiAgICAgICAgICAgIGlmIChzY3JvbGxQb3NpdGlvbiA9PT0gMCB8fCBzY3JvbGxQb3NpdGlvbiA9PT0gbWF4U2Nyb2xsKSB7XG4gICAgICAgICAgICAvLyBzY3JvbGxlci5zdHlsZS5vdmVyZmxvd1kgPSAnYXV0byc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc2Nyb2xsZXIuc3R5bGUub3ZlcmZsb3dZID0gJ2hpZGRlbic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGEgc2xpZGUgaXMgaW4gdGhlIG1pZGRsZSBhbmQgdXBkYXRlIGFjdGl2ZSBjbGFzcyBiYXNlZCBvbiBkaXJlY3Rpb25cbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyQ2VudGVyID0gKChzY3JvbGxlci5jbGllbnRXaWR0aCAvIDEwKSAqIDMuNSk7XG4gICAgICAgICAgICBzbGlkZXMuZm9yRWFjaCgoc2xpZGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzbGlkZVN0YXJ0ID0gaW5kZXggKiBzbGlkZVdpZHRoO1xuICAgICAgICAgICAgY29uc3Qgc2xpZGVFbmQgPSBzbGlkZVN0YXJ0ICsgc2xpZGVXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IHNsaWRlQ2VudGVyID0gKHNsaWRlU3RhcnQgKyBzbGlkZUVuZCkgLyAyO1xuXG4gICAgICAgICAgICBpZiAoc2Nyb2xsQW1vdW50ID4gMCAmJiBzY3JvbGxQb3NpdGlvbiArIHNjcm9sbGVyQ2VudGVyID49IHNsaWRlU3RhcnQgJiYgbGFzdFNjcm9sbFBvc2l0aW9uICsgc2Nyb2xsZXJDZW50ZXIgPCBzbGlkZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgLy8gU2Nyb2xsaW5nIGRvd24gKHRvIHRoZSBsZWZ0KSBhbmQgc2xpZGUganVzdCBwYXNzZWQgdGhlIGNlbnRlclxuICAgICAgICAgICAgICAgIHNsaWRlLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxBbW91bnQgPCAwICYmIHNjcm9sbFBvc2l0aW9uICsgc2Nyb2xsZXJDZW50ZXIgPD0gc2xpZGVTdGFydCAmJiBsYXN0U2Nyb2xsUG9zaXRpb24gKyBzY3JvbGxlckNlbnRlciA+IHNsaWRlU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAvLyBTY3JvbGxpbmcgdXAgKHRvIHRoZSByaWdodCkgYW5kIHNsaWRlIGp1c3QgcGFzc2VkIHRoZSBjZW50ZXJcbiAgICAgICAgICAgICAgICBzbGlkZS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKGluZGV4IDwgMSl7XG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3NCYXIuc3R5bGUucmlnaHQgID0gYCR7c2xpZGVXaWR0aCAqIDEuNX1weGA7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBwcm9ncmVzc0Jhci5zdHlsZS5yaWdodCAgPSBgJHsoc2Nyb2xsUG9zaXRpb24gLSAoc2xpZGVXaWR0aCAvIDEuMikpICogLTF9cHhgO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBVcGRhdGUgbGFzdCBzY3JvbGwgcG9zaXRpb25cbiAgICAgICAgICAgIGxhc3RTY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBBZGQgY2xpY2sgZXZlbnQgbGlzdGVuZXIgdG8gZWFjaCBzbGlkZSB0byBzY3JvbGwgaXQgaW50byB0aGUgbWlkZGxlXG4gICAgICAgIHNsaWRlcy5mb3JFYWNoKChzbGlkZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHNsaWRlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgc2Nyb2xsVG9NaWRkbGUoaW5kZXgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB9ZWxzZSB7XG4gICAgICAgIC8vIEludGVyc2VjdGlvbiBPYnNlcnZlciBmb3IgdG91Y2ggZGV2aWNlc1xuICAgICAgICBjb25zdCBvYnNlcnZlck9wdGlvbnMgPSB7XG4gICAgICAgICAgICByb290OiBzY3JvbGxlcixcbiAgICAgICAgICAgIHRocmVzaG9sZDogMC41IC8vIEFkanVzdCB0aGlzIHZhbHVlIGFzIG5lZWRlZFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG9ic2VydmVyQ2FsbGJhY2sgPSAoZW50cmllcykgPT4ge1xuICAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICAgICAgICAgIGVudHJ5LnRhcmdldC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZW50cnkudGFyZ2V0LmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIob2JzZXJ2ZXJDYWxsYmFjaywgb2JzZXJ2ZXJPcHRpb25zKTtcblxuICAgICAgICBzbGlkZXMuZm9yRWFjaChzbGlkZSA9PiB7XG4gICAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHNsaWRlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVQcm9ncmVzc0JhcigpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2dyZXNzID0gKHNjcm9sbGVyLnNjcm9sbExlZnQgLyBtYXhTY3JvbGwpICogMTIwMDtcbiAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0eWxlLndpZHRoID0gYCR7cHJvZ3Jlc3N9cHhgO1xuICAgICAgICB9XG4gICAgICAgICAgICAvLyBMaXN0ZW4gZm9yIHRoZSBzY3JvbGwgZXZlbnQgdG8gdXBkYXRlIHRoZSBwcm9ncmVzcyBiYXJcbiAgICAgICAgICAgIHNjcm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZVByb2dyZXNzQmFyKTtcblxuICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgcHJvZ3Jlc3MgYmFyIG9uIGxvYWRcbiAgICAgICAgICAgIHVwZGF0ZVByb2dyZXNzQmFyKCk7XG4gICAgICAgIH1cbiAgICB9XG59IiwiLyoqXG4gKiBUb2dnbGUgc2VhcmNoIGljb24gd2l0aCBhY2Nlc3NpYmlsaXR5IGluIG1pbmRcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbCAtIHNlbGVjdG9yIGZvciBhZGRpbmcgYW4gYWN0aXZlIGNsYXNzXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZVNlYXJjaChlbCkge1xuICBjb25zdCBidG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKTtcbiAgY29uc3Qgc2VhcmNoRm9ybSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qc1NlYXJjaEZvcm0nKTtcbiAgY29uc3Qgc2VhcmNoSW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanNTZWFyY2hQcm9kJyk7XG4gIGNvbnN0IHNlYXJjaEJ0biA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qc1NlYXJjaEJ0bicpO1xuICBjb25zdCAkc2VhcmNoX3dyYXBwZXIgPSBqUXVlcnkoJy5qc0F1dG9TZWFyY2hQYXJlbnQnKTtcblxuXG4gIGlmIChidG4pIHtcbiAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoYnRuLmdldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcpID09PSAnZmFsc2UnKSB7XG4gICAgICAgIG9wZW5TZWFyY2goKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsb3NlU2VhcmNoKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoc2VhcmNoSW5wdXQpIHtcbiAgICAgIGZ1bmN0aW9uIGxvZ0ZvY3VzKGV2ZW50KSB7XG4gICAgICAgIHNlYXJjaElucHV0LnZhbHVlID0gJyc7XG4gICAgICB9XG4gICAgICBzZWFyY2hJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGxvZ0ZvY3VzKTtcbiAgICB9XG5cbiAgfVxuICAvKiBDaGVjayBvdXRzaWRlIGNsaWNrICovXG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFldmVudC50YXJnZXQuY2xvc2VzdCgnLmMtc2l0ZS1zZWFyY2gnKSkge1xuICAgICAgLy8gY2xpY2sgb3V0c2lkZVxuICAgICAgaWYgKGJ0bikge1xuICAgICAgICBpZiAoYnRuLmdldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcpID09PSAndHJ1ZScpIHtcbiAgICAgICAgICBjbG9zZVNlYXJjaCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNsaWNrIGluc2lkZVxuICAgIH1cbiAgfSwgZmFsc2UpO1xuXG4gIGZ1bmN0aW9uIGNsb3NlU2VhcmNoKCkge1xuICAgIHNlYXJjaEZvcm0uY2xhc3NMaXN0LnJlbW92ZSgnaXMtYWN0aXZlJyk7XG4gICAgYnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuICAgICRzZWFyY2hfd3JhcHBlci5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgc2VhcmNoSW5wdXQuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICAgIHNlYXJjaEJ0bi5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7XG4gIH1cblxuICBmdW5jdGlvbiBvcGVuU2VhcmNoKCkge1xuICAgIHNlYXJjaEZvcm0uY2xhc3NMaXN0LmFkZCgnaXMtYWN0aXZlJyk7XG4gICAgYnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7XG4gICAgc2VhcmNoSW5wdXQucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpO1xuICAgIHNlYXJjaElucHV0LnZhbHVlID0gJyc7XG4gICAgc2VhcmNoQnRuLnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcbiAgICAvLyBzZXQgZm9jdXNcbiAgICBqUXVlcnkoJy5qc1NlYXJjaFByb2QnKS5mb2N1cygpO1xuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gc3RpY2t5UG9wVXAoKSB7XG5cblxuXG4gICAgY29uc3QgcG9wdXBNID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm0tcG9wdXAnKTtcbiAgICBpZiAocG9wdXBNKSB7XG4gICAgICAgIHZhciBpbnB1dE1haWwgPSAkKCcubS1wb3B1cCBbdHlwZT1cImVtYWlsXCJdJyk7XG5cbiAgICAgICAgY29uc3Qgb3RoZXJQb3AgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYm94LWhvbGRlcicpO1xuICAgICAgICBpbnB1dE1haWwucGFyZW50KCkucHJlcGVuZCgnPHNwYW4gY2xhc3M9XCJjLWZvcm1fX2ljb1wiPjxzdmcgY2xhc3M9XCJpY29uIFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHJvbGU9XCJpbWdcIj48dXNlIHhsaW5rOmhyZWY9XCIjbGliLWljb24tZW1haWxcIj48L3VzZT48L3N2Zz48L3NwYW4+Jyk7XG5cbiAgICAgICAgY29uc3QgcG9wdXBUID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnBvcHVwLXRvZ2dsZScpO1xuXG4gICAgICAgIHBvcHVwTS5jbGFzc0xpc3QucmVtb3ZlKCdvZmYnKTtcbiAgICAgICAgcG9wdXBULmNsYXNzTGlzdC5yZW1vdmUoJ29mZicpO1xuXG4gICAgICAgIC8vIEZ1bmN0aW9uIHRvIHRvZ2dsZSAnb24nIGNsYXNzIG9uIGVsZW1lbnRzXG4gICAgICAgIGZ1bmN0aW9uIHRvZ2dsZU9uQ2xhc3MoKSB7XG4gICAgICAgICAgICBwb3B1cE0uY2xhc3NMaXN0LnRvZ2dsZSgnb24nKTtcbiAgICAgICAgICAgIHBvcHVwVC5jbGFzc0xpc3QudG9nZ2xlKCdvbicpO1xuICAgICAgICAgICAgaWYgKG90aGVyUG9wKSB7XG4gICAgICAgICAgICAgICAgb3RoZXJQb3AuY2xhc3NMaXN0LnRvZ2dsZSgnb3RoZXInKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gYWRkT25DbGFzcygpIHtcbiAgICAgICAgICAgIHBvcHVwTS5jbGFzc0xpc3QuYWRkKCdvbicpO1xuICAgICAgICAgICAgcG9wdXBULmNsYXNzTGlzdC5hZGQoJ29uJyk7XG4gICAgICAgICAgICBpZiAob3RoZXJQb3ApIHtcbiAgICAgICAgICAgICAgICBvdGhlclBvcC5jbGFzc0xpc3QudG9nZ2xlKCdvdGhlcicpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIEZ1bmN0aW9uIHRvIHJlbW92ZSAnb24nIGNsYXNzIGZyb20gZWxlbWVudHNcbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlT25DbGFzcygpIHtcbiAgICAgICAgICAgIHBvcHVwTS5jbGFzc0xpc3QucmVtb3ZlKCdvbicpO1xuICAgICAgICAgICAgcG9wdXBULmNsYXNzTGlzdC5yZW1vdmUoJ29uJyk7XG4gICAgICAgICAgICBpZiAob3RoZXJQb3ApIHtcbiAgICAgICAgICAgICAgICBvdGhlclBvcC5jbGFzc0xpc3QucmVtb3ZlKCdvdGhlcicpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGdW5jdGlvbiB0byBoYW5kbGUgY2xvc2luZyB0aGUgcG9wdXBcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlQ2xvc2UoKSB7XG4gICAgICAgICAgICByZW1vdmVPbkNsYXNzKCk7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncG9wdXBDbG9zZWQnLCAndHJ1ZScpOyAvLyBTYXZlIGNsb3NpbmcgYWN0aW9uIGluIGxvY2FsIHN0b3JhZ2VcbiAgICAgICAgfVxuXG5cblxuICAgICAgICAvLyBGdW5jdGlvbiB0byBjaGVjayBsb2NhbCBzdG9yYWdlIGFuZCBzaG93IHBvcHVwIGlmIG5vdCBjbG9zZWRcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tMb2NhbFN0b3JhZ2UoKSB7XG4gICAgICAgICAgICBpZiAoIWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdwb3B1cENsb3NlZCcpKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChhZGRPbkNsYXNzLCA1MDAwKTsgLy8gNSBzZWNvbmRzIHRpbWVvdXRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEV2ZW50IGxpc3RlbmVyIGZvciBjbGlja2luZyBwb3B1cCB0b2dnbGVcbiAgICAgICAgcG9wdXBULmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdG9nZ2xlT25DbGFzcyk7XG5cbiAgICAgICAgLy8gRXZlbnQgbGlzdGVuZXIgZm9yIGNsaWNraW5nIGNsb3NlIGJ1dHRvblxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucG9wdXAtd3JhcCAuY2xvc2UnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNsb3NlKTtcblxuICAgICAgICAvLyBDaGVjayBsb2NhbCBzdG9yYWdlIG9uIHBhZ2UgbG9hZFxuICAgICAgICBjaGVja0xvY2FsU3RvcmFnZSgpO1xuXG4gICAgICAgIC8vIERlZmluZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBJbnRlcnNlY3Rpb24gT2JzZXJ2ZXJcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlSW50ZXJzZWN0aW9uKGVudHJpZXMsIG9ic2VydmVyKSB7XG4gICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goZW50cnkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhlICdoaWRkZW4nIGNsYXNzIHdoZW4gdGhlIGZvb3RlciBpcyBpbiB0aGUgdmlld3BvcnRcbiAgICAgICAgICAgICAgICAgICAgcG9wdXBULmNsYXNzTGlzdC5hZGQoJ3NoaWZ0LXVwJyk7XG4gICAgICAgICAgICAgICAgICAgIHBvcHVwTS5jbGFzc0xpc3QuYWRkKCdzaGlmdC11cCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgJ2hpZGRlbicgY2xhc3Mgd2hlbiB0aGUgZm9vdGVyIGlzIG91dCBvZiB0aGUgdmlld3BvcnRcbiAgICAgICAgICAgICAgICAgICAgcG9wdXBULmNsYXNzTGlzdC5yZW1vdmUoJ3NoaWZ0LXVwJyk7XG4gICAgICAgICAgICAgICAgICAgIHBvcHVwTS5jbGFzc0xpc3QucmVtb3ZlKCdzaGlmdC11cCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IEludGVyc2VjdGlvbiBPYnNlcnZlciBpbnN0YW5jZVxuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihoYW5kbGVJbnRlcnNlY3Rpb24sIHtcbiAgICAgICAgICAgIHJvb3Q6IG51bGwsIC8vIFVzZSB0aGUgdmlld3BvcnQgYXMgdGhlIHJvb3RcbiAgICAgICAgICAgIHRocmVzaG9sZDogMCAvLyBUcmlnZ2VyIHRoZSBjYWxsYmFjayBhcyBzb29uIGFzIGFueSBwYXJ0IG9mIHRoZSBmb290ZXIgaXMgdmlzaWJsZVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUYXJnZXQgdGhlIGZvb3RlciBlbGVtZW50XG4gICAgICAgIGNvbnN0IGZvb3RlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb3B5LXByaXZhY3knKTtcblxuICAgICAgICAvLyBTdGFydCBvYnNlcnZpbmcgdGhlIGZvb3RlclxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGZvb3Rlcik7XG5cbiAgICB9XG5cbiAgICAvLyBzdGlja3kgUmFRIENUQVxuICAgIC8vIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gICAgIC8vIFNlbGVjdCB0aGUgLmJveC1jdGEgZWxlbWVudFxuICAgIC8vICAgICBjb25zdCBib3hDVEEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYm94LWN0YS4tc2l0ZS13aWRlJyk7XG4gICAgLy9cbiAgICAvLyAgICAgLy8gQ2hlY2sgaWYgdGhlIGN0YSBpcyB0aGVyZVxuICAgIC8vICAgICBpZiAoYm94Q1RBKSB7XG4gICAgLy8gICAgICAgICAvLyBJZiB0aGUgc2Nyb2xsIHBvc2l0aW9uIGlzIGdyZWF0ZXIgdGhhbiAxMDAwcHgsIGFkZCB0aGUgJ3Nob3cnIGNsYXNzXG4gICAgLy8gICAgICAgICBpZiAod2luZG93LnNjcm9sbFkgPiAxMDAwKSB7XG4gICAgLy8gICAgICAgICAgICAgYm94Q1RBLmNsYXNzTGlzdC5hZGQoJ3Nob3cnKTtcbiAgICAvLyAgICAgICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICAgICAgLy8gb3RoZXJ3aXNlXG4gICAgLy8gICAgICAgICAgICAgLy8gYm94Q1RBLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTtcbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgfVxuICAgIC8vIH0pO1xuICAgIC8vIFZhcmlhYmxlIHRvIHRyYWNrIGlmIHRoZSBwb3B1cCBoYXMgYWxyZWFkeSBiZWVuIHRyaWdnZXJlZFxuICAgIGxldCBwb3B1cFRyaWdnZXJlZCA9IGZhbHNlO1xuXG4gICAgLy8gVmFyaWFibGUgdG8gdHJhY2sgdXNlciBpbnRlcmFjdGlvbiAoc2Nyb2xsIG9yIGNsaWNrKVxuICAgIGxldCBpbnRlcmFjdGlvbkRldGVjdGVkID0gZmFsc2U7XG5cbiAgICAvLyBUaW1lciB2YXJpYWJsZVxuICAgIGxldCBpbnRlcmFjdGlvblRpbWVyO1xuXG4gICAgLy8gRnVuY3Rpb24gdG8gc2hvdyB0aGUgcG9wdXBcbiAgICBmdW5jdGlvbiBzaG93UG9wdXAoKSB7XG4gICAgICAgIGNvbnN0IGJveENUQSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ib3gtY3RhLi1zaXRlLXdpZGUnKTtcbiAgICAgICAgaWYgKGJveENUQSkge1xuICAgICAgICAgICAgYm94Q1RBLmNsYXNzTGlzdC5hZGQoJ3Nob3cnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV2ZW50IGxpc3RlbmVyIGZvciBzY3JvbGxcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWludGVyYWN0aW9uRGV0ZWN0ZWQpIHtcbiAgICAgICAgICAgIGludGVyYWN0aW9uRGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgc3RhcnRUaW1lcigpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBFdmVudCBsaXN0ZW5lciBmb3IgY2xpY2tcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghaW50ZXJhY3Rpb25EZXRlY3RlZCkge1xuICAgICAgICAgICAgaW50ZXJhY3Rpb25EZXRlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICBzdGFydFRpbWVyKCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEZ1bmN0aW9uIHRvIHN0YXJ0IHRoZSB0aW1lclxuICAgIGZ1bmN0aW9uIHN0YXJ0VGltZXIoKSB7XG4gICAgICAgIGlmICghcG9wdXBUcmlnZ2VyZWQpIHtcbiAgICAgICAgICAgIGludGVyYWN0aW9uVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBwb3B1cFRyaWdnZXJlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgc2hvd1BvcHVwKCk7XG4gICAgICAgICAgICB9LCA2MDAwMCk7IC8vIDYwIHNlY29uZHNcbiAgICAgICAgfVxuICAgIH1cbn0iLCJcbmV4cG9ydCBmdW5jdGlvbiB0YWJzVW5kZXJsaW5lKCkge1xuICAgIGNvbnN0IHRhYk5hdnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuanMtdGJuYXYnKTtcblxuICAgIGlmKHdpbmRvdy5pbm5lcldpZHRoID4gMTAyNCkge1xuICAgICAgICBpZih0YWJOYXZzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRhYk5hdnMuZm9yRWFjaCgodGFiTmF2KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHRhYnMgPSB0YWJOYXYucXVlcnlTZWxlY3RvckFsbCgnLmpzLXRhYnMtbmF2LWl0ZW0nKTtcbiAgICAgICAgICAgICAgICBsZXQgdGFic1VuZGVsaW5lID0gdGFiTmF2LnF1ZXJ5U2VsZWN0b3IoJy5qcy10YWJzLW5hdi11bmRlcmxpbmUnKTtcblxuICAgICAgICAgICAgICAgIHRhYnMuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW92ZVRhYnNVbmRlcmxpbmUodGFic1VuZGVsaW5lLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG1vdmVUYWJzVW5kZXJsaW5lKGVsZW0sIGkpIHtcbiAgICAgICAgICAgIGlmKGVsZW0gJiYgaSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZWxlbS5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlM2QoJyArIGkgKiAxMDAgKyAnJSwwLDApJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFbGVtZW50KCkge1xuXG4gICAgalF1ZXJ5KFwiI2pzLXRvZ2dsZVRyaWdnZXJcIikuY2xpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBqUXVlcnkoXCIjanMtdG9nZ2xlRWxlbWVudCBcIikudG9nZ2xlQ2xhc3MoJ29wZW4nKVxuICAgICAgICBqUXVlcnkodGhpcykudG9nZ2xlQ2xhc3MoJ2lzLWFjdGl2ZScpXG4gICAgfSk7XG5cbiAgICBqUXVlcnkoXCIjanMtdG9nZ2xlVHJpZ2dlclwiKS5tb3VzZWVudGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgalF1ZXJ5KFwiI2pzLXRvZ2dsZUVsZW1lbnQgXCIpLmFkZENsYXNzKCdvcGVuJylcbiAgICAgICAgalF1ZXJ5KHRoaXMpLmFkZENsYXNzKCdpcy1hY3RpdmUnKVxuICAgIH0pO1xuXG4gICAgalF1ZXJ5KFwiI2pzLXRvZ2dsZUVsZW1lbnRcIikubW91c2VsZWF2ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGpRdWVyeSh0aGlzKS5yZW1vdmVDbGFzcygnb3BlbicpXG4gICAgICAgIGpRdWVyeShcIiNqcy10b2dnbGVUcmlnZ2VyXCIpLnJlbW92ZUNsYXNzKCdpcy1hY3RpdmUnKVxuICAgIH0pO1xuXG59XG4iLCJpbXBvcnQgeyBjcmVhdGVBY2NvcmRpb25zIH0gZnJvbSBcIi4vYWNjb3JkaW9ucy9hY2NvcmRpb25zXCI7XG5cbmNvbnN0IGNhbGxBY2NvcmRpb25zID0gKCkgPT4ge1xuICAgIGNyZWF0ZUFjY29yZGlvbnMoKTtcbn1cblxuZXhwb3J0IHtcbiAgICBjYWxsQWNjb3JkaW9uc1xufSIsImltcG9ydCBEU01QQWNjb3JkaW9ucyBmcm9tIFwiLi4vLi4vbGlicmFyeS90YWJzLWFjY29yZGlvbnMvRFNNUEFjY29yZGlvbnNcIjtcblxuY29uc3QgYWNjb3JkaW9uSUQgPSAnanMtYWNjJztcbmNvbnN0IGFjY29yZGlvblNlbGVjdG9yID0gJy5qcy1hY2Mtd3JhcHBlcic7XG5jb25zdCBhY2NvcmRpb25JdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYWNjb3JkaW9uU2VsZWN0b3IpO1xuXG5jb25zdCBjcmVhdGVBY2NvcmRpb25zID0gKCkgPT4ge1xuICAgIGxldCBhY2NvcmRpb25zID0gW107XG4gICAgbGV0IGFjY29yZGlvbk9wdGlvbnMgPSBbXTtcblxuICAgIGFjY29yZGlvbkl0ZW1zLmZvckVhY2goIChhY2MsIGkpID0+IHtcbiAgICAgICAgbGV0IGFjY0lEID0gYCR7YWNjb3JkaW9uSUR9LSR7aX1gO1xuICAgICAgICBsZXQgY2FsbElEID0gYCMke2FjY0lEfWA7XG4gICAgICAgIGFjYy5zZXRBdHRyaWJ1dGUoJ2lkJywgYWNjSUQpO1xuXG4gICAgICAgIGFjY29yZGlvbnNbaV0gPSBuZXcgRFNNUEFjY29yZGlvbnMoY2FsbElEKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IHtcbiAgICBjcmVhdGVBY2NvcmRpb25zXG59IiwiZXhwb3J0IGZ1bmN0aW9uIGJveEN0YVBvc2l0aW9uKCkge1xuICBjb25zdCB1cGRhdGVCb3hDdGFQb3NpdGlvbiA9ICgpID0+IHtcbiAgICBjb25zdCB0b2NDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2V6LXRvYy1jb250YWluZXJcIik7XG4gICAgY29uc3QgcHJvZ3Jlc3NCYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3NpbmdsZVByb2dyZXNzQmFyXCIpO1xuICAgIGNvbnN0IGJveEN0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuc2l0ZS1mb290ZXIgLmJveC1jdGFcIik7XG5cbiAgICBpZiAoYm94Q3RhICYmICh0b2NDb250YWluZXIgfHwgcHJvZ3Jlc3NCYXIpKSB7XG4gICAgICBjb25zdCB0b2NIZWlnaHQgPSB0b2NDb250YWluZXIgPyB0b2NDb250YWluZXIub2Zmc2V0SGVpZ2h0IDogMDtcbiAgICAgIGNvbnN0IHByb2dyZXNzSGVpZ2h0ID0gcHJvZ3Jlc3NCYXIgPyBwcm9ncmVzc0Jhci5vZmZzZXRIZWlnaHQgOiAwO1xuICAgICAgY29uc3QgdG90YWxIZWlnaHQgPSB0b2NIZWlnaHQgKyBwcm9ncmVzc0hlaWdodDtcbiAgICAgIGJveEN0YS5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tYm90dG9tLXBvc2l0aW9uXCIsIGAke3RvdGFsSGVpZ2h0fXB4YCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG11dGF0aW9uT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgdXBkYXRlQm94Q3RhUG9zaXRpb24oKTtcbiAgfSk7XG5cbiAgY29uc3Qgb2JzZXJ2ZVNpemVDaGFuZ2VzID0gKGVsZW1lbnQpID0+IHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICB1cGRhdGVCb3hDdGFQb3NpdGlvbigpO1xuICAgICAgfSk7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQpO1xuICAgIH1cbiAgfTtcblxuICBtdXRhdGlvbk9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge1xuICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICBzdWJ0cmVlOiB0cnVlLFxuICB9KTtcblxuICB1cGRhdGVCb3hDdGFQb3NpdGlvbigpO1xuXG4gIG9ic2VydmVTaXplQ2hhbmdlcyhkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2V6LXRvYy1jb250YWluZXJcIikpO1xuICBvYnNlcnZlU2l6ZUNoYW5nZXMoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNzaW5nbGVQcm9ncmVzc0JhclwiKSk7XG59IiwiaW1wb3J0IHsgZHNibHNTbGlkZXIgfSBmcm9tICcuL3NsaWRlcnMvc2xpZGVyLWRzYmxzJztcbmltcG9ydCB7IHNpbXBsZVNsaWRlcnMgfSBmcm9tICcuL3NsaWRlcnMvc2xpZGVyLXNpbXBsZSc7XG5pbXBvcnQgeyBhZHZhbmNlZFNsaWRlcnMgfSBmcm9tICcuL3NsaWRlcnMvc2xpZGVyLWFkdmFuY2VkJztcbmltcG9ydCB7IGJhU2xpZGVyIH0gZnJvbSAnLi9zbGlkZXJzL3NsaWRlci1iYSc7XG5pbXBvcnQgeyB2U2xpZGVyIH0gZnJvbSAnLi9zbGlkZXJzL3NsaWRlci12ZXJ0aWNhbCc7XG5cbmNvbnN0IGNhbGxTbGlkZXJzID0gKCkgPT4ge1xuICAgIGRzYmxzU2xpZGVyKCk7XG4gICAgc2ltcGxlU2xpZGVycygpO1xuICAgIGFkdmFuY2VkU2xpZGVycygpO1xuICAgIGJhU2xpZGVyKCk7XG4gICAgdlNsaWRlcigpO1xuXG4gICAgY29uc3Qgc2xpZGVySW5kID0gJChcIi5qcy1zbGlkZXItaW5kXCIpO1xuICAgIGlmKHNsaWRlckluZCkge1xuICAgIGZ1bmN0aW9uIGhhbmRsZVNsaWRlckluZChlbnRyaWVzLCBvYnNlcnZlcikge1xuICAgICAgICBlbnRyaWVzLmZvckVhY2goZW50cnkgPT4ge1xuICAgICAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XG5cbiAgICAgICAgICAgICAgICB2YXIgc2xpZGVySW5kdXN0cnkgPSBuZXcgU3dpcGVyKFwiLmpzLXNsaWRlci1pbmRcIiwge1xuICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiA1LFxuICAgICAgICAgICAgICAgICAgICBzcGFjZUJldHdlZW46IDAsXG4gICAgICAgICAgICAgICAgICAgIGxvb3A6ZmFsc2UsXG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDU3NToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VCZXR3ZWVuOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A6ZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVUb0NsaWNrZWRTbGlkZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQ6MjBcblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBvYnNlcnZlci51bm9ic2VydmUoZW50cnkudGFyZ2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIENyZWF0ZSBhbiBpbnRlcnNlY3Rpb24gb2JzZXJ2ZXIgaW5zdGFuY2VcbiAgICBsZXQgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlU2xpZGVySW5kLCB7IHRocmVzaG9sZDogMCB9KTtcblxuICAgIC8vIFNlbGVjdCBhbGwgYnV0dG9ucyB0byBvYnNlcnZlXG5cbiAgICBzbGlkZXJJbmQuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzKTsgLy8gU3RhcnQgb2JzZXJ2aW5nIGVhY2ggc2xpZGVyXG4gICAgfSk7XG4gICAgfVxuXG59O1xuXG5leHBvcnQge1xuICAgIGNhbGxTbGlkZXJzLFxufTtcbiIsIi8qKlxuICogQWR2YW5jZWQgc2xpZGVyIHR5cGVcbiAqL1xuXG5pbXBvcnQgU3dpcGVyV2l0aFRhYnMgZnJvbSBcIi4uLy4uL2xpYnJhcnkvc2xpZGVycy9zd2lwZXItd2l0aC10YWJzXCI7XG5pbXBvcnQgeyBpc0F1dG9QbGF5T24gfSBmcm9tIFwiLi4vLi4vbGlicmFyeS9zbGlkZXJzL3NsaWRlci1vcHRpb25zL2F1dG9wbGF5XCI7XG5pbXBvcnQgeyBpc0xhenlMb2FkT24gfSBmcm9tIFwiLi4vLi4vbGlicmFyeS9zbGlkZXJzL3NsaWRlci1vcHRpb25zL2xhenlcIjtcbmltcG9ydCB7IGlzQnJlYWtwb2ludHNPbiB9IGZyb20gXCIuLi8uLi9saWJyYXJ5L3NsaWRlcnMvc2xpZGVyLW9wdGlvbnMvYnJlYWtwb2ludHNcIjtcbmltcG9ydCB7aXNOYXZpZ2F0aW9uT259IGZyb20gXCIuLi8uLi9saWJyYXJ5L3NsaWRlcnMvc2xpZGVyLW9wdGlvbnMvbmF2aWdhdGlvblwiO1xuaW1wb3J0IHt1X3BhcnNlQm9vbH0gZnJvbSBcIi4uLy4uL3V0aWxzL3VfdHlwZXNcIjtcbmltcG9ydCB7aXNMb29wT259IGZyb20gXCIuLi8uLi9saWJyYXJ5L3NsaWRlcnMvc2xpZGVyLW9wdGlvbnMvbG9vcFwiO1xuaW1wb3J0IHsgaXNTbGlkZVRvQ2xpY2VkU2xpZGVPbiB9IGZyb20gXCIuLi8uLi9saWJyYXJ5L3NsaWRlcnMvc2xpZGVyLW9wdGlvbnMvc2xpZGUtdG8tY2xpY2tlZC1zbGlkZVwiO1xuXG5cbi8vIGNvbmZpZyBzZWxlY3RvcnMgb25seSBoZXJlXG5jb25zdCBhZHZhbmNlZE5hbWUgPSAnanMtc2xpZGVyLWFkdmFuY2VkJztcbmNvbnN0IGFkdlNsaWRlclNlbCA9ICcuanMtc2xpZGVyLWFkdmFuY2VkJztcbmNvbnN0IGFkdlNsaWRlclRhYnMgPSAnLmwtc2xpZGVyLW5hdic7XG5cbi8vIGZpbmQgdGhvc2Ugc2VsZWN0b3JzXG5jb25zdCBhZHZTbGlkZXJMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChhZHZTbGlkZXJTZWwpO1xuXG5jb25zdCBhZHZhbmNlZFNsaWRlcnMgPSAoKSA9PiB7XG4gICAgLy8gbG9vcCB0aHJvdWdoIHNsaWRlcnMgYW5kIGFkZCBJRCdzIHRvIGl0XG5cbiAgICBsZXQgYWR2U2xpZGVyT3B0aW9ucyA9IFtdO1xuICAgIGxldCBhZHZTbGlkZXJzID0gW107XG4gICAgbGV0IHNsaWRlclRhYk9wdGlvbnMgPSBbXTtcbiAgICBsZXQgYWR2U2xpZGVyTmF2ID0gW107XG4gICAgbGV0IHNsaWRlck5hdjtcbiAgICBsZXQgYWR2U2xpZGVyVGh1bWJzID0gW107XG4gICAgbGV0IHNsaWRlclRodW1iT3B0aW9ucyA9IFtdO1xuXG4gICAgbGV0IGJlZm9yZUFmdGVyVGh1bWJTbGlkZXIgPSBudWxsXG5cbiAgICBhZHZTbGlkZXJMaXN0LmZvckVhY2goIChzbGlkZXIsIGkpID0+IHtcbiAgICAgICAgYWR2U2xpZGVyT3B0aW9uc1tpXSA9IHtcbiAgICAgICAgICAgIGNlbnRlcmVkU2xpZGVzOiB0cnVlLFxuICAgICAgICAgICAgb2JzZXJ2ZXI6IHRydWUsIG9ic2VydmVQYXJlbnRzOiB0cnVlLFxuICAgICAgICAgICAgY2FsY3VsYXRlSGVpZ2h0OnRydWUsXG5cbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgICBlbDogJy5tLXNsaWRlcl9fcGFnaW5hdGlvbicsXG4gICAgICAgICAgICAgICAgY2xpY2thYmxlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBzbGlkZXJUYWJPcHRpb25zW2ldID0ge1xuICAgICAgICAgICAgaXRlbTogJy5qcy1uYXZfX2l0ZW0nLFxuICAgICAgICAgICAgYWN0aXZlOiAnaXMtYWN0aXZlJyxcbiAgICAgICAgICAgIHRyaWdnZXI6ICdjbGljaycsXG4gICAgICAgIH1cblxuICAgICAgICBpZihzbGlkZXIuY2xhc3NMaXN0LmNvbnRhaW5zKCdqcy1iZWZvcmUtYWZ0ZXInKSkge1xuICAgICAgICAgICAgc2xpZGVyVGh1bWJPcHRpb25zW2ldID0ge1xuICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6ICdhdXRvJyxcbiAgICAgICAgICAgICAgICBzcGFjZUJldHdlZW46IDEwLFxuICAgICAgICAgICAgICAgIGNlbnRlcmVkU2xpZGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGxvb3A6IHRydWUsXG4gICAgICAgICAgICAgICAgc2xpZGVUb0NsaWNrZWRTbGlkZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvYnNlcnZlcjogdHJ1ZSwgb2JzZXJ2ZVBhcmVudHM6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNsaWRlclRodW1iT3B0aW9uc1tpXSA9IHtcbiAgICAgICAgICAgICAgICBzcGFjZUJldHdlZW46IDEwLFxuICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6ICdhdXRvJyxcbiAgICAgICAgICAgICAgICBmcmVlTW9kZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0aHJlc2hvbGQ6IDEwLFxuICAgICAgICAgICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzOiAnYy1zbGlkZXItbmF2JyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlcjogdHJ1ZSwgb2JzZXJ2ZVBhcmVudHM6IHRydWUsXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCBpc1RodW1icyA9IHVfcGFyc2VCb29sKHNsaWRlci5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2xpZGVyLXRodW1icycpKTtcblxuICAgICAgICBsZXQgc2xpZGVySUQgPSBgJHthZHZhbmNlZE5hbWV9LSR7aX1gO1xuICAgICAgICBzbGlkZXIuc2V0QXR0cmlidXRlKCdpZCcsIHNsaWRlcklEKTtcblxuICAgICAgICBsZXQgc2xpZGVyUGFyZW50ID0gc2xpZGVyLmNsb3Nlc3QoJy5tLXNsaWRlcicpO1xuXG4gICAgICAgIGlmKHNsaWRlclBhcmVudCkge1xuICAgICAgICAgICAgc2xpZGVyTmF2ID0gc2xpZGVyUGFyZW50LnF1ZXJ5U2VsZWN0b3IoYWR2U2xpZGVyVGFicyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2xpZGVyVGh1bWJzU2VsZWN0b3I7XG4gICAgICAgIGlmKHNsaWRlck5hdikgeyBcbiAgICAgICAgICAgIGlmKGlzVGh1bWJzKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNsaWRlclRodW1ic0lEID0gJ2pzLXNsaWRlci1hZHZhbmNlZC10aHVtYnMtJyArIGk7XG4gICAgICAgICAgICAgICAgc2xpZGVyTmF2LnNldEF0dHJpYnV0ZSgnaWQnLCBzbGlkZXJUaHVtYnNJRCk7XG4gICAgICAgICAgICAgICAgc2xpZGVyVGh1bWJzU2VsZWN0b3IgPSAnIycgKyBzbGlkZXJUaHVtYnNJRDtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IHNsaWRlclRhYklEID0gJ2pzLXNsaWRlci1hZHZhbmNlZC1uYXYtJyArIGk7XG4gICAgICAgICAgICAgICAgc2xpZGVyTmF2LnNldEF0dHJpYnV0ZSgnaWQnLCBzbGlkZXJUYWJJRCk7XG4gICAgICAgICAgICAgICAgc2xpZGVyVGFiT3B0aW9uc1tpXS5lbGVtZW50ID0gJyMnICsgc2xpZGVyVGFiSUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhZHZTbGlkZXJPcHRpb25zW2ldID0gaXNMb29wT24oc2xpZGVyLCBhZHZTbGlkZXJPcHRpb25zW2ldKTtcbiAgICAgICAgYWR2U2xpZGVyT3B0aW9uc1tpXSA9IGlzQXV0b1BsYXlPbihzbGlkZXIsIGFkdlNsaWRlck9wdGlvbnNbaV0pO1xuICAgICAgICBhZHZTbGlkZXJPcHRpb25zW2ldID0gaXNMYXp5TG9hZE9uKHNsaWRlciwgYWR2U2xpZGVyT3B0aW9uc1tpXSk7XG4gICAgICAgIGFkdlNsaWRlck9wdGlvbnNbaV0gPSBpc0JyZWFrcG9pbnRzT24oc2xpZGVyLCBhZHZTbGlkZXJPcHRpb25zW2ldKTtcbiAgICAgICAgYWR2U2xpZGVyT3B0aW9uc1tpXSA9IGlzU2xpZGVUb0NsaWNlZFNsaWRlT24oc2xpZGVyLCBhZHZTbGlkZXJPcHRpb25zW2ldKTtcblxuICAgICAgICAvLyAubS1zbGlkZXIgcGFyZW50IGlzIGhhcmRjb2RlZCBpbiBpc05hdmlnYXRpb25PbiBvcHRpb25zXG4gICAgICAgIGFkdlNsaWRlck9wdGlvbnNbaV0gPSBpc05hdmlnYXRpb25PbihzbGlkZXIsIGFkdlNsaWRlck9wdGlvbnNbaV0sIGFkdmFuY2VkTmFtZSwgaSk7XG5cbiAgICAgICAgaWYoaXNUaHVtYnMpIHtcblxuICAgICAgICAgICAgYWR2U2xpZGVyVGh1bWJzW2ldID0gbmV3IFN3aXBlcihzbGlkZXJUaHVtYnNTZWxlY3Rvciwgc2xpZGVyVGh1bWJPcHRpb25zW2ldKTtcblxuICAgICAgICAgICAgYWR2U2xpZGVyT3B0aW9uc1tpXS50aHVtYnMgPSB7fTtcbiAgICAgICAgICAgIGFkdlNsaWRlck9wdGlvbnNbaV0udGh1bWJzLnN3aXBlciA9IGFkdlNsaWRlclRodW1ic1tpXTtcblxuICAgICAgICAgICAgYWR2U2xpZGVyT3B0aW9uc1tpXS5ub1N3aXBpbmdTZWxlY3RvciA9ICcubC1zbGlkZXItbmF2LCAubS1zbGlkZXJfX3BhZ2luYXRpb24nO1xuXG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgaWYoc2xpZGVyLmNsYXNzTGlzdC5jb250YWlucygnanMtYmVmb3JlLWFmdGVyJykpIHtcblxuICAgICAgICAgICAgICAgIGpRdWVyeSgnLmpzLWJlZm9yZS1hZnRlci10aHVtYicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxsU2xpZGVzID0gWy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5qcy1iZWZvcmUtYWZ0ZXItdGh1bWInKV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBqUXVlcnkodGhpcykuZ2V0KDApO1xuXG4gICAgICAgICAgICAgICAgICAgIGFkdlNsaWRlclRodW1ic1tpXS5zbGlkZVRvKGFsbFNsaWRlcy5pbmRleE9mKGN1cnJlbnQpKTtcblxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgYmVmb3JlQWZ0ZXJUaHVtYlNsaWRlciA9IGFkdlNsaWRlclRodW1ic1tpXTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKi9cblxuICAgICAgICB9XG5cbiAgICAgICAgYWR2U2xpZGVyc1tpXSA9IG5ldyBTd2lwZXIoc2xpZGVyLCBhZHZTbGlkZXJPcHRpb25zW2ldKTtcblxuICAgICAgICAvKmlmKHNsaWRlci5jbGFzc0xpc3QuY29udGFpbnMoJ2pzLWJlZm9yZS1hZnRlcicpKSB7XG4gICAgICAgICAgICBhZHZTbGlkZXJzW2ldLm9uKCdzbGlkZUNoYW5nZScsIGZ1bmN0aW9uIChzd3ApIHtcbiAgICAgICAgICAgICAgICBpZihiZWZvcmVBZnRlclRodW1iU2xpZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZUFmdGVyVGh1bWJTbGlkZXIuc2xpZGVUbyhzd3AucmVhbEluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSovICAgXG5cblxuXG4gICAgICAgIGlmKHNsaWRlck5hdikge1xuICAgICAgICAgICAgaWYoYWR2U2xpZGVyc1tpXS5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgIGFkdlNsaWRlck5hdltpXSA9IG5ldyBTd2lwZXJXaXRoVGFicyhhZHZTbGlkZXJzW2ldLCBzbGlkZXJUYWJPcHRpb25zW2ldKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gYWR2U2xpZGVyc1tpXS5lbDtcbiAgICAgICAgICAgICAgICBjb25zdCB1bmRlcmxpbmUgPSBjb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qcy1zbGlkZXItbmF2LXVuZGVybGluZScpO1xuXG4gICAgICAgICAgICAgICAgaWYodW5kZXJsaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkdlNsaWRlck5hdltpXS5zd2lwZXIub24oJ3NsaWRlQ2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXJsaW5lLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGUzZCgnICsgYWR2U2xpZGVyTmF2W2ldLnN3aXBlci5hY3RpdmVJbmRleCAqIDEwMCArICclLDAsMCknO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH0pXG5cbn1cblxuZXhwb3J0IHtcbiAgICBhZHZhbmNlZFNsaWRlcnNcbn1cbiIsIi8qKlxuICogQmVmb3JlL2FmdGVyIFNMSURFUiB0eXBlXG4gKi9cblxuY29uc3QgYmFTbGlkZXIgPSAoKSA9PiB7XG5cbiAgICBjb25zdCBiYVNsaWRlckVsID0gJCgnLmpzLWJlZm9yZS1hZnRlcicpO1xuXG4gICAgaWYoYmFTbGlkZXJFbCkge1xuICAgICAgICBmdW5jdGlvbiBoYW5kbGVCYVNsaWRlckludGVyc2VjdGlvbihlbnRyaWVzLCBvYnNlcnZlcikge1xuICAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgYmFTbGlkZXJFbENvdW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5zLWJlZm9yZS1hZnRlciAuYy1zbGlkZXItbmF2X190aHVtYlwiKS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzdGFydFNsaWRlID0gTWF0aC5yb3VuZCgoYmFTbGlkZXJFbENvdW50IC8gMiAtIDEpKTtcbiAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGJhVGh1bWJzID0gbmV3IFN3aXBlcignLmJhLXRodW1icycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlQmV0d2VlbjogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZnJlZU1vZGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB3YXRjaFNsaWRlc1Byb2dyZXNzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2VudGVyZWRTbGlkZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlkZVRvQ2xpY2tlZFNsaWRlOnRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1RvdWNoTW92ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZDozMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNzY4OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlQmV0d2VlbjogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVNb2RlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXRjaFNsaWRlc1Byb2dyZXNzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXJlZFNsaWRlczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlVG9DbGlja2VkU2xpZGU6dHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dUb3VjaE1vdmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQ6MzAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYmFTbGlkZXIgPSBuZXcgU3dpcGVyKCcuYmEtc2xpZGVyJywgeyBcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9IZWlnaHQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvcGxheTpmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RWw6ICcuYmEtc2xpZGVyLW5leHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZFbDogJy5iYS1zbGlkZXItcHJldicsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGh1bWJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpcGVyOiBiYVRodW1icyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBzbGlkZUNoYW5nZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAvLyBsZXQgY3VycmVudEluZGV4ID0gYmFTbGlkZXIuYWN0aXZlSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIC8vIGxldCBjdXJyZW50U2xpZGUgPSAkKFwiLmpzLXByb2Nlc3MtdGh1bWJzIC5zd2lwZXItc2xpZGVcIilbY3VycmVudEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgLy8gbGV0IHNsaWRlID0gY3VycmVudFNsaWRlLnF1ZXJ5U2VsZWN0b3IoJy5sLXRlc3RpbW9uaWFscycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAvLyBjb25zb2xlLmxvZygkKGN1cnJlbnRTbGlkZSkuaGVpZ2h0KCkgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgLy8gLy8gJCgnLmJhLXNsaWRlci5zd2lwZXItY29udGFpbmVyJykuaGVpZ2h0KCQoY3VycmVudFNsaWRlKS5oZWlnaHQoKSApXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGJhU2xpZGVyLnVwZGF0ZUF1dG9IZWlnaHQoMjAwMClcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBiYVNsaWRlci5jb250cm9sbGVyLmNvbnRyb2wgPSBiYVRodW1icztcbiAgICAgICAgICAgICAgICAgICAgLy8gYmFUaHVtYnMuY29udHJvbGxlci5jb250cm9sID0gYmFTbGlkZXI7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFTbGlkZXIuc2xpZGVUbyhzdGFydFNsaWRlKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBjc1RodW1icyA9IG5ldyBTd2lwZXIoJy5jcy10aHVtYnMnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFjZUJldHdlZW46IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVNb2RlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRlcmVkU2xpZGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVUb0NsaWNrZWRTbGlkZTp0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Njg6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VCZXR3ZWVuOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZU1vZGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRlcmVkU2xpZGVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVUb0NsaWNrZWRTbGlkZTp0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgY3NTbGlkZXIgPSBuZXcgU3dpcGVyKCcuY3Mtc2xpZGVyJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbDogJy5jcy1zbGlkZXItbmV4dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldkVsOiAnLmNzLXNsaWRlci1wcmV2JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHVtYnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2lwZXI6IGNzVGh1bWJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLnVub2JzZXJ2ZShlbnRyeS50YXJnZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIENyZWF0ZSBhbiBpbnRlcnNlY3Rpb24gb2JzZXJ2ZXIgaW5zdGFuY2VcbiAgICAgICAgdmFyIG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGhhbmRsZUJhU2xpZGVySW50ZXJzZWN0aW9uLCB7IHRocmVzaG9sZDogMCB9KTtcblxuICAgICAgICAvLyBTZWxlY3QgYWxsIGJ1dHRvbnMgdG8gb2JzZXJ2ZVxuXG4gICAgICAgIGJhU2xpZGVyRWwuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUodGhpcyk7IC8vIFN0YXJ0IG9ic2VydmluZyBlYWNoIHNsaWRlclxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBjc1NsaWRlci5jb250cm9sbGVyLmNvbnRyb2wgPSBjc1RodW1icztcbiAgICAgICAgLy8gY3NUaHVtYnMuY29udHJvbGxlci5jb250cm9sID0gY3NTbGlkZXI7XG5cbiAgICB9XG5cbiAgICB2YXIgcHJvY2Vzc1NsaWRlciA9ICQoJy5zLW91ci1wcm9jZXNzJyk7XG4gICAgaWYocHJvY2Vzc1NsaWRlcil7XG5cbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlUHJTbGlkZXJJbnRlcnNlY3Rpb24oZW50cmllcywgb2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIGVudHJpZXMuZm9yRWFjaChlbnRyeSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgXG5cbiAgICAgICAgICAgICAgICBsZXQgcHJUaHVtYnMgPSBuZXcgU3dpcGVyKCcuanMtcHJvY2Vzcy10aHVtYnMgJywge1xuICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiAxLFxuICAgICAgICAgICAgICAgICAgICBzcGFjZUJldHdlZW46IDEwLFxuICAgICAgICAgICAgICAgICAgICAvLyBjZW50ZXJlZFNsaWRlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gbG9vcDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdGhyZXNob2xkOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVUb0NsaWNrZWRTbGlkZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gaW5pdGlhbFNsaWRlOiBzdGFydFNsaWRlLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd1RvdWNoTW92ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbDogJy5wci1uZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZFbDogJy5wci1wcmV2JyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDc2ODoge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogXCJhdXRvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1RvdWNoTW92ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZDogMTAwXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGNlbnRlcmVkU2xpZGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHByVGh1bWJzLm9uKCdzbGlkZUNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGxldCBwclNsaWRlciA9IG5ldyBTd2lwZXIoJy5qcy1wcm9jZXNzLXNsaWRlcycsIHtcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogMSxcbiAgICAgICAgICAgICAgICAgICAgLy8gY2VudGVyZWRTbGlkZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIC8vIGxvb3A6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIC8vIGxvb3BlZFNsaWRlczogYmFTbGlkZXJFbENvdW50LFxuICAgICAgICAgICAgICAgICAgICAvLyBpbml0aWFsU2xpZGU6IHN0YXJ0U2xpZGUsXG4gICAgICAgICAgICAgICAgICAgIGF1dG9IZWlnaHQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbDogJy5wci1uZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZFbDogJy5wci1wcmV2JyxcbiAgICAgICAgICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAgICAgICAgIHRodW1iczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpcGVyOiBwclRodW1icyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlQ2hhbmdlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QganVtcGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5qdW1wZXJcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudFNsaWRlID0gcHJTbGlkZXIuYWN0aXZlSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRodW1iU2xpZGUgPSAkKFwiLmpzLXByb2Nlc3MtdGh1bWJzIC5zd2lwZXItc2xpZGVcIilbY3VycmVudFNsaWRlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2Zmc2V0TGVmdCA9IHRodW1iU2xpZGUub2Zmc2V0TGVmdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWlXaWR0aCA9IHRodW1iU2xpZGUub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganVtcGVyLnN0eWxlLmxlZnQgPSBgJHsoIG9mZnNldExlZnQgKyAoYWlXaWR0aCAvIDIpKSAtIDQ1IH1weGA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganVtcGVyLmNsYXNzTGlzdC5hZGQoXCJ5b29ob29cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1bXBlci5jbGFzc0xpc3QucmVtb3ZlKFwieW9vaG9vXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDQ1MCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBuYXZQYXJlbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5uYXYtanVtcGVyXCIpO1xuXG4gICAgICAgICAgICAgICAgbmF2UGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChuYXZQYXJlbnQsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGp1bXBlciA9IG5hdlBhcmVudC5xdWVyeVNlbGVjdG9yKFwiLmp1bXBlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBuYXZQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcIi5sLXNsaWRlci1uYXYgLnN3aXBlci1zbGlkZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlSXRlbSA9IG5hdlBhcmVudC5xdWVyeVNlbGVjdG9yKFwiLmwtc2xpZGVyLW5hdiAuc3dpcGVyLXNsaWRlLXRodW1iLWFjdGl2ZVwiKTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgb2Zmc2V0TGVmdCA9IGFjdGl2ZUl0ZW0ub2Zmc2V0TGVmdDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFpV2lkdGggPSBhY3RpdmVJdGVtLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICBqdW1wZXIuc3R5bGUubGVmdCA9IGAkeyggb2Zmc2V0TGVmdCArIChhaVdpZHRoIC8gMikpIC0gNDUgfXB4YDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci51bm9ic2VydmUoZW50cnkudGFyZ2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ3JlYXRlIGFuIGludGVyc2VjdGlvbiBvYnNlcnZlciBpbnN0YW5jZVxuICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlUHJTbGlkZXJJbnRlcnNlY3Rpb24sIHsgdGhyZXNob2xkOiAwIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gU2VsZWN0IGFsbCBidXR0b25zIHRvIG9ic2VydmVcbiAgICAgICAgXG4gICAgICAgIHByb2Nlc3NTbGlkZXIuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUodGhpcyk7IC8vIFN0YXJ0IG9ic2VydmluZyBlYWNoIHNsaWRlclxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBcbiAgICAkKFwiLmpzLXRhYnMtbmF2LWl0ZW1cIikuY2xpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAkKFwiLmdyaWRkZXItc2hvd1wiKS5yZW1vdmUoKTtcbiAgICB9KVxufVxuXG5cbmV4cG9ydCB7XG4gICAgYmFTbGlkZXJcbn1cbiIsIi8qKlxuICogRFNCTFMgU0xJREVSIHR5cGVcbiAqL1xuaW1wb3J0IERTTVBTbGlkZXJEU0JMUyBmcm9tIFwiLi4vLi4vbGlicmFyeS9zbGlkZXJzL3NsaWRlci1kc2Jsc1wiO1xuXG4vLyBjb25maWcgc2VsZWN0b3JzIG9ubHkgaGVyZVxuY29uc3QgZHNibHNTZWwgPSAnLmpzLXNsaWRlci1kc2Jscyc7XG5jb25zdCBkc2Jsc1NlbE1vYiA9ICcuanMtc2xpZGVyLWRzYmxzLW0nO1xuXG4vLyBmaW5kIHRob3NlIHNlbGVjdG9yc1xuY29uc3QgZHNibHNTbGlkZXJMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChkc2Jsc1NlbCk7XG5jb25zdCBkc2Jsc1NsaWRlck1vYmlsZUxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGRzYmxzU2VsTW9iKTtcblxuXG5jb25zdCBkc2Jsc1NsaWRlciA9ICgpID0+IHtcbiAgICAvLyBsb29wIHRocm91Z2ggc2xpZGVycyBhbmQgYWRkIElEJ3MgdG8gaXQsIHdlIGFzc3VtZSBlYWNoIGRzYmxzIHNsaWRlciBoYXMgaXRzIG93biBtb2JpbGUgc2xpZGVyIGFzIGl0XG4gICAgLy8gY29tcG9uZW50LCBzbyBubyBuZWVkIHRvIGxvb3AsIHNlYXJjaCBwYXJlbnQgYW5kIHF1ZXJ5IGNoaWxkIGVsZW1lbnRcblxuICAgIGxldCBkc2JscyA9IFtdO1xuICAgIGRzYmxzU2xpZGVyTGlzdC5mb3JFYWNoKCAoc2xpZGVyLCBpKSA9PiB7XG4gICAgICAgIGxldCBzbGlkZXJJRCA9ICdqcy1zbGlkZXItZHNibHMtJyArIGk7XG4gICAgICAgIGxldCBzbGlkZXJNb2JpbGVJRCA9ICdqcy1zbGlkZXItZHNibHMtbS0nICsgaTtcblxuICAgICAgICBzbGlkZXIuc2V0QXR0cmlidXRlKCdpZCcsIHNsaWRlcklEKTtcbiAgICAgICAgZHNibHNTbGlkZXJNb2JpbGVMaXN0W2ldLnNldEF0dHJpYnV0ZSgnaWQnLCBzbGlkZXJNb2JpbGVJRCk7XG5cbiAgICAgICAgZHNibHNbaV0gPSBuZXcgRFNNUFNsaWRlckRTQkxTKHNsaWRlcklEKTtcbiAgICB9KVxufVxuXG5cbmV4cG9ydCB7XG4gICAgZHNibHNTbGlkZXJcbn0iLCIvKipcbiAqIFNpbXBsZSBzbGlkZXIgdHlwZVxuICovXG5pbXBvcnQgeyBpc0F1dG9QbGF5T24gfSBmcm9tICcuLi8uLi9saWJyYXJ5L3NsaWRlcnMvc2xpZGVyLW9wdGlvbnMvYXV0b3BsYXknO1xuaW1wb3J0IHsgaXNMYXp5TG9hZE9uIH0gZnJvbSAnLi4vLi4vbGlicmFyeS9zbGlkZXJzL3NsaWRlci1vcHRpb25zL2xhenknO1xuaW1wb3J0IHsgaXNCcmVha3BvaW50c09uIH0gZnJvbSAnLi4vLi4vbGlicmFyeS9zbGlkZXJzL3NsaWRlci1vcHRpb25zL2JyZWFrcG9pbnRzJztcbmltcG9ydCB7IGlzTmF2aWdhdGlvbk9uIH0gZnJvbSAnLi4vLi4vbGlicmFyeS9zbGlkZXJzL3NsaWRlci1vcHRpb25zL25hdmlnYXRpb24nO1xuXG4vLyBjb25maWcgc2VsZWN0b3JzIG9ubHkgaGVyZVxuY29uc3Qgc2ltcGxlTmFtZSA9ICdqcy1zbGlkZXItc2ltcGxlJztcbmNvbnN0IHNpbXBsZVNsaWRlclNlbCA9ICcuanMtc2xpZGVyLXNpbXBsZSc7XG5cbi8vIGZpbmQgdGhvc2Ugc2VsZWN0b3JzXG5jb25zdCBzaW1wbGVTbGlkZXJMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzaW1wbGVTbGlkZXJTZWwpO1xuXG5jb25zdCBzaW1wbGVTbGlkZXJzID0gKCkgPT4ge1xuICAgIC8vIGxvb3AgdGhyb3VnaCBzbGlkZXJzIGFuZCBhZGQgSUQncyB0byBpdFxuXG4gICAgY29uc3Qgc2ltcGxlU2xpZGVyT3B0aW9ucyA9IFtdO1xuICAgIGNvbnN0IHNpbXBsZVNsaWRlcnMgPSBbXTtcbiAgICBsZXQgY3VycmVudFdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG5cbiAgICBzaW1wbGVTbGlkZXJMaXN0LmZvckVhY2goKHNsaWRlciwgaSkgPT4ge1xuICAgICAgICBzaW1wbGVTbGlkZXJPcHRpb25zW2ldID0ge1xuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAgIGVsOiAnLm0tc2xpZGVyX19wYWdpbmF0aW9uJyxcbiAgICAgICAgICAgICAgICBjbGlja2FibGU6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzbGlkZXJJRCA9IGAke3NpbXBsZU5hbWV9LSR7aX1gO1xuICAgICAgICBzbGlkZXIuc2V0QXR0cmlidXRlKCdpZCcsIHNsaWRlcklEKTtcblxuICAgICAgICBzaW1wbGVTbGlkZXJPcHRpb25zW2ldID0gaXNBdXRvUGxheU9uKHNsaWRlciwgc2ltcGxlU2xpZGVyT3B0aW9uc1tpXSk7XG4gICAgICAgIHNpbXBsZVNsaWRlck9wdGlvbnNbaV0gPSBpc0xhenlMb2FkT24oc2xpZGVyLCBzaW1wbGVTbGlkZXJPcHRpb25zW2ldKTtcbiAgICAgICAgc2ltcGxlU2xpZGVyT3B0aW9uc1tpXSA9IGlzQnJlYWtwb2ludHNPbihzbGlkZXIsIHNpbXBsZVNsaWRlck9wdGlvbnNbaV0pO1xuXG4gICAgICAgIC8vIC5tLXNsaWRlciBwYXJlbnQgaXMgaGFyZGNvZGVkIGluIGlzTmF2aWdhdGlvbk9uIG9wdGlvbnNcbiAgICAgICAgc2ltcGxlU2xpZGVyT3B0aW9uc1tpXSA9IGlzTmF2aWdhdGlvbk9uKHNsaWRlciwgc2ltcGxlU2xpZGVyT3B0aW9uc1tpXSwgc2ltcGxlTmFtZSwgaSk7XG5cbiAgICAgICAgbGV0IG5vTW9iaWxlID0gc2xpZGVyLmdldEF0dHJpYnV0ZSgnZGF0YS1uby1tb2JpbGUnKTtcblxuICAgICAgICBzaW1wbGVTbGlkZXJzW2ldID0gbmV3IFN3aXBlcihzbGlkZXIsIHNpbXBsZVNsaWRlck9wdGlvbnNbaV0pO1xuXG4gICAgICAgIGlmIChub01vYmlsZSkge1xuICAgICAgICAgICAgY3VycmVudFdpZHRoIDwgNzY4ID8gc2ltcGxlU2xpZGVyc1tpXS5kZXN0cm95KCkgOiAnJztcbiAgICAgICAgfVxuICAgIH0pO1xufTtcblxuZXhwb3J0IHtcbiAgICBzaW1wbGVTbGlkZXJzLFxufTtcbiIsIi8qKlxuICogIFN3aXBlciBzbGlkZXIgd2l0aCB0aHVtYnMgZm9yIHRlc3RpbW9uaWFscyBtb2R1bGVcbiAqL1xuXG5jb25zdCB2U2xpZGVyID0gKCkgPT4ge1xuXG4gICAgY29uc3QgdlNsaWRlckVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLXNsaWRlci12ZXJ0aWNhbCcpO1xuXG4gICAgaWYodlNsaWRlckVsKSB7XG5cbiAgICAgICAgbGV0IHZTbGlkZXJFbENvdW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5qcy1zbGlkZXItdmVydGljYWwgLmdhbGxlcnktdG9wIC5zd2lwZXItc2xpZGVcIikubGVuZ3RoO1xuXG4gICAgICAgIGNvbnN0IHNsaWRlclRvcCA9IG5ldyBTd2lwZXIoXCIuZ2FsbGVyeS10b3BcIiwge1xuICAgICAgICAgICAgc3BhY2VCZXR3ZWVuOiAwLFxuICAgICAgICAgICAgZWZmZWN0OiBcInNsaWRlXCIsXG4gICAgICAgICAgICBkaXJlY3Rpb246IFwidmVydGljYWxcIixcbiAgICAgICAgICAgIGNlbnRlcmVkU2xpZGVzOiB0cnVlLFxuICAgICAgICAgICAgaW5pdGlhbFNsaWRlOiAxLFxuICAgICAgICAgICAgYnJlYWtwb2ludHM6IHtcbiAgICAgICAgICAgICAgICAzMDA6IHtcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogMVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgMTEwMDoge1xuICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiAxXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAxNjUwOiB7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gYXV0b3BsYXk6IHtcbiAgICAgICAgICAgIC8vICAgICBkZWxheTogMjAwMCxcbiAgICAgICAgICAgIC8vICAgICByZXZlcnNlRGlyZWN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgLy8gICAgIHBhdXNlT25Nb3VzZUVudGVyOiB0cnVlLFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIHNwZWVkOiAxMDAwLFxuICAgICAgICAgICAgbG9vcDogdHJ1ZSxcbiAgICAgICAgICAgIGxvb3BlZFNsaWRlczogdlNsaWRlckVsQ291bnQsXG4gICAgICAgICAgICBsb29wQWRkaXRpb25hbFNsaWRlczogMixcbiAgICAgICAgICAgIHNsaWRlVG9DbGlja2VkU2xpZGU6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc2xpZGVyQm90dG9tID0gbmV3IFN3aXBlcihcIi5nYWxsZXJ5LWJvdHRvbVwiLCB7XG4gICAgICAgICAgICBpbml0aWFsU2xpZGU6IDEsXG4gICAgICAgICAgICBjZW50ZXJlZFNsaWRlczogdHJ1ZSxcbiAgICAgICAgICAgIGRpcmVjdGlvbjogXCJ2ZXJ0aWNhbFwiLFxuICAgICAgICAgICAgbG9vcDogdHJ1ZSxcbiAgICAgICAgICAgIGxvb3BlZFNsaWRlczogdlNsaWRlckVsQ291bnQsXG4gICAgICAgICAgICBsb29wQWRkaXRpb25hbFNsaWRlczogMixcbiAgICAgICAgICAgIG5hdmlnYXRpb246IHtcbiAgICAgICAgICAgICAgICBuZXh0RWw6IFwiLnN3aXBlci1idXR0b24tbmV4dFwiLFxuICAgICAgICAgICAgICAgIHByZXZFbDogXCIuc3dpcGVyLWJ1dHRvbi1wcmV2XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2xpZGVyVG9wLmNvbnRyb2xsZXIuY29udHJvbCA9IHNsaWRlckJvdHRvbTtcbiAgICAgICAgc2xpZGVyQm90dG9tLmNvbnRyb2xsZXIuY29udHJvbCA9IHNsaWRlclRvcDtcblxuLy8gc2xpZGVyVG9wLm9uKFwic2xpZGVDaGFuZ2VcIiwgZnVuY3Rpb24gKCkge1xuLy8gICBzbGlkZXJCb3R0b20uc2xpZGVUbyhzbGlkZXJUb3AuYWN0aXZlSW5kZXgpO1xuLy8gfSk7XG5cbi8vIHNsaWRlckJvdHRvbS5vbihcInNsaWRlQ2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcbi8vICAgc2xpZGVyVG9wLnNsaWRlVG8oc2xpZGVyQm90dG9tLmFjdGl2ZUluZGV4KTtcbi8vIH0pO1xuXG5cbiAgICB9XG5cbn1cblxuXG5leHBvcnQge1xuICAgIHZTbGlkZXJcbn1cbiIsImltcG9ydCBEU01QVGFiVG9BY2NvcmRpb25Nb2JpbGUgZnJvbSBcIi4uL2xpYnJhcnkvdGFicy1hY2NvcmRpb25zL0RTTVBUYWJzVG9BY2NvcmRpb25Nb2JpbGVcIjtcblxuY29uc3QgdGFiYWNjSUQgPSAnanMtdGFiLWFjYyc7XG5jb25zdCB0YWJhY2NTZWxlY3RvciA9ICcuanMtdGFicy10by1hY2Mtd3JhcHBlcic7XG5jb25zdCB0YWJhY2NJdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGFiYWNjU2VsZWN0b3IpO1xuXG5jb25zdCBjYWxsVGFiQWNjb3JkaW9uc01vYmlsZSA9ICgpID0+IHtcblxuICAgIHRhYmFjY0l0ZW1zLmZvckVhY2goIChhY2MsIGkpID0+IHtcbiAgICAgICAgbGV0IHRhSUQgPSBgJHt0YWJhY2NJRH0tJHtpfWA7XG4gICAgICAgIGxldCBjYWxsSUQgPSBgIyR7dGFJRH1gO1xuICAgICAgICBhY2Muc2V0QXR0cmlidXRlKCdpZCcsIHRhSUQpO1xuXG4gICAgICAgIG5ldyBEU01QVGFiVG9BY2NvcmRpb25Nb2JpbGUoY2FsbElEKTtcbiAgICB9KTtcbn1cblxuXG5leHBvcnQge1xuICAgIGNhbGxUYWJBY2NvcmRpb25zTW9iaWxlXG59IiwiLyogZXNsaW50LWRpc2FibGUgbGluZWJyZWFrLXN0eWxlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVhZE1vcmUoKSB7XG4gICAgY29uc3QgcmVhZE1vcmVXcmFwcGVycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5yZWFkLW1vcmUtd3JhcHBlcicpO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlYWRNb3JlV3JhcHBlcnMpXG4gICAgcmVhZE1vcmVXcmFwcGVycy5mb3JFYWNoKChyZWFkTW9yZVdyYXBwZXIpID0+IHtcbiAgICAgIGNvbnN0IHJlYWRNb3JlQnRuID0gcmVhZE1vcmVXcmFwcGVyLnF1ZXJ5U2VsZWN0b3IoJy5qcy1yZWFkLW1vcmUtdG9nZ2xlJyk7XG4gICAgICBjb25zdCByZWFkTW9yZUJ0bkNsaWNrID0gcmVhZE1vcmVXcmFwcGVyLnF1ZXJ5U2VsZWN0b3IoJy5qcy1yZWFkLW1vcmUtdG9nZ2xlLWNsaWNrJyk7XG4gICAgICAvLyBjb25zdCBidG5UZXh0Tm9BY3RpdmUgPSByZWFkTW9yZUJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2hvdy1sZXNzLXRleHQnKTtcbiAgICAgIC8vIGNvbnN0IGJ0blRleHRBY3RpdmUgPSByZWFkTW9yZUJ0bi5jaGlsZHJlblswXS50ZXh0Q29udGVudDtcbiAgICAgIGNvbnN0IHJlYWRNb3JlVGV4dCA9IHJlYWRNb3JlV3JhcHBlci5xdWVyeVNlbGVjdG9yKCcucmVhZC1tb3JlLXRleHQnKTtcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gcmVhZE1vcmVXcmFwcGVyLmNsYXNzTGlzdC5jb250YWlucygnaXMtYWN0aXZlJyk7XG4gICAgICBjb25zdCByZWFkTW9yZVRleHRIZWlnaHQgPSAocmVhZE1vcmVUZXh0KSA/IHJlYWRNb3JlVGV4dC5zY3JvbGxIZWlnaHQgOiAwO1xuXG4gICAgICBpZiAocmVhZE1vcmVXcmFwcGVyLmNsYXNzTGlzdC5jb250YWlucygnaXMtYWN0aXZlJykpe1xuICAgICAgICAgIHJlYWRNb3JlVGV4dC5zdHlsZS5tYXhIZWlnaHQgPSBgJHtyZWFkTW9yZVRleHRIZWlnaHR9cHhgO1xuICAgICAgfVxuICBcbiAgICAgIGZ1bmN0aW9uIHNob3dUZXh0KCkge1xuICAgICAgICAgIGlmKHJlYWRNb3JlVGV4dCkge1xuICAgICAgICAgICAgJCgnLnJlYWQtbW9yZS13cmFwcGVyJykucmVtb3ZlQ2xhc3MoJ2lzLWFjdGl2ZScpO1xuICAgICAgICAgICAgJCgnLnJlYWQtbW9yZS10ZXh0JykuY3NzKHtcIm1heEhlaWdodFwiOlwiMFwifSk7XG4gICAgICAgICAgICByZWFkTW9yZVdyYXBwZXIuY2xhc3NMaXN0LmFkZCgnaXMtYWN0aXZlJyk7XG4gICAgICAgICAgICAvLyByZWFkTW9yZUJ0bi5jaGlsZHJlblswXS50ZXh0Q29udGVudCA9IGJ0blRleHROb0FjdGl2ZTtcbiAgICAgICAgICAgIHJlYWRNb3JlVGV4dC5zdHlsZS5tYXhIZWlnaHQgPSBgJHtyZWFkTW9yZVRleHRIZWlnaHR9cHhgO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgXG4gICAgICBmdW5jdGlvbiBoaWRlVGV4dCgpIHtcbiAgICAgICAgICBpZihyZWFkTW9yZVRleHQpIHtcbiAgICAgICAgICAgIHJlYWRNb3JlV3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCdpcy1hY3RpdmUnKTtcbiAgICAgICAgICAgIC8vIHJlYWRNb3JlQnRuLmNoaWxkcmVuWzBdLnRleHRDb250ZW50ID0gYnRuVGV4dEFjdGl2ZTtcbiAgICAgICAgICAgIHJlYWRNb3JlVGV4dC5zdHlsZS5tYXhIZWlnaHQgPSAwO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgXG4gICAgICBmdW5jdGlvbiB0b2dnbGUoKSB7XG4gICAgICAgIGlmIChyZWFkTW9yZVdyYXBwZXIuY2xhc3NMaXN0LmNvbnRhaW5zKCdpcy1hY3RpdmUnKSl7XG4gICAgICAgICAgICByZWFkTW9yZVRleHQuc3R5bGUubWF4SGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIHJlYWRNb3JlV3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCdpcy1hY3RpdmUnKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgcmVhZE1vcmVXcmFwcGVyLmNsYXNzTGlzdC5hZGQoJ2lzLWFjdGl2ZScpO1xuICAgICAgICAgIHJlYWRNb3JlVGV4dC5zdHlsZS5tYXhIZWlnaHQgPSBgJHtyZWFkTW9yZVRleHRIZWlnaHR9cHhgO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVhZE1vcmVCdG4pIHtcbiAgICAgICAgcmVhZE1vcmVCdG4uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIHNob3dUZXh0KTtcbiAgICAgIH1lbHNle1xuICAgICAgICByZWFkTW9yZUJ0bkNsaWNrLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdG9nZ2xlKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gcmVhZE1vcmVCdG4uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgaGlkZVRleHQpO1xuICAgIH0pO1xuICBcbiAgICAvLyAkKCcucm0taW5pLWRyb3AtanMnKS5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgXG4gICAgLy8gICAkKHRoaXMpLm1vdXNlZW50ZXIoZnVuY3Rpb24oKXtcbiAgICAvLyAgICAgICB2YXIgbW9yZVR4dEggPSAkKHRoaXMpLmZpbmQoXCIucmVhZC1tb3JlLXRleHRcIikub3V0ZXJIZWlnaHQoKTtcbiAgICAvLyAgICAgICB2YXIgZHJvcCA9ICQodGhpcykuZmluZChcIi5yZWFkLW1vcmUtZHJvcFwiKTtcbiAgICAvLyAgICAgICAkKCcucm0taW5pLWRyb3AtanMnKS5yZW1vdmVDbGFzcygnaXMtYWN0aXZlJyk7XG4gICAgLy8gICAgICAgJCh0aGlzKS5hZGRDbGFzcygnaXMtYWN0aXZlJyk7XG4gICAgLy8gICAgICAgJCgnLnJlYWQtbW9yZS1kcm9wJykucmVtb3ZlQ2xhc3MoJ2lzLWFjdGl2ZScpLmhlaWdodCgwKTtcbiAgICAvLyAgICAgICBkcm9wLmhlaWdodChtb3JlVHh0SCkuYWRkQ2xhc3MoJ2lzLWFjdGl2ZScpO1xuICBcbiAgICAvLyAgIH0pXG4gICAgLy8gfSk7XG4gIH07XG4gIFxuICAiLCIvKipcbiAqIFRvZ2dsZSBtb2JpbGUgbmF2XG4gKiBAcGFyYW0ge3N0cmluZ30gZWwgLSBzZWxlY3RvciBmb3IgYWRkaW5nIGFuIGFjdGl2ZSBjbGFzc1xuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtb2JpbGVOYXYoZWwsIHN1YkVsKSB7XG4gICAgY29uc3QgYnRucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZWwpO1xuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XG4gICAgY29uc3Qgc3ViTWVudXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuanMtZHJvcGRvd24tbWVudS1ob2xkZXInKTtcbiAgICBsZXQgbmV3V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAvLyBtYWluIG1lbnUgdG9nZ2xlXG4gICAgYnRucy5mb3JFYWNoKGJ0biA9PiB7XG4gICAgICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50ID0+IHtcblxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgaWYgKG5ld1dpZHRoIDwgMTAyNSkge1xuICAgICAgICAgICAgICAgIHN1Yk1lbnVzLmZvckVhY2goc3ViTWVudSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Yk1lbnUucXVlcnlTZWxlY3RvcignLnN1Yi1tZW51Jykuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGJ0bi5nZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnKSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICAgICAgICAgIGJ0bi5jbGFzc0xpc3QuYWRkKCdpcy1hY3RpdmUnKTtcbiAgICAgICAgICAgICAgICBib2R5LmNsYXNzTGlzdC5hZGQoJ25hdi1hY3RpdmUnKTtcbiAgICAgICAgICAgICAgICBidG4uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICBzaGlmdEZvY3VzKCcjbWVudS1oZWFkZXIgYScpO1xuICAgICAgICAgICAgICAgIGtlZXBGb2N1c0luc2lkZURpdigpO1xuICAgICAgICAgICAgICAgIGNsb3NlTWVudUVzYygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBidG4uY2xhc3NMaXN0LnJlbW92ZSgnaXMtYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgYm9keS5jbGFzc0xpc3QucmVtb3ZlKCduYXYtYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgYnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuICAgICAgICAgICAgICAgIHNoaWZ0Rm9jdXMoJy5qcy10b2dnbGVOYXYnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIC8vIHN1Ym1lbnUgdG9nZ2xlXG5cbiAgICBjb25zdCBtZW51SXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuanMtbWVudS1kcm9wZG93bi10b2dnbGUnKTtcblxuICAgIG1lbnVJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgLy8gQ2xvc2UgYWxsIG90aGVyIG1lbnVzXG4gICAgICAgICAgICBtZW51SXRlbXMuZm9yRWFjaChvdGhlckl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvdGhlckl0ZW0gIT09IGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RoZXJNZW51ID0gb3RoZXJJdGVtLnF1ZXJ5U2VsZWN0b3IoJy5qcy1kcm9wZG93bi1tZW51LWhvbGRlcicpO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXJNZW51KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdGhlck1lbnUuc3R5bGUuaGVpZ2h0ID0gJzAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJNZW51LmNsYXNzTGlzdC5yZW1vdmUoJ25hdi1hY3RpdmUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG90aGVySXRlbS5jbGFzc0xpc3QucmVtb3ZlKCduYXYtYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gVG9nZ2xlIHRoZSBjbGlja2VkIG1lbnVcbiAgICAgICAgICAgIGNvbnN0IG1lbnUgPSBpdGVtLnF1ZXJ5U2VsZWN0b3IoJy5qcy1kcm9wZG93bi1tZW51LWhvbGRlcicpO1xuICAgICAgICAgICAgaWYgKG1lbnUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJNZW51ID0gbWVudS5xdWVyeVNlbGVjdG9yKCcuc3ViLW1lbnUnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBzdWJNZW51ID8gc3ViTWVudS5vZmZzZXRIZWlnaHQgOiAwO1xuXG4gICAgICAgICAgICAgICAgLy8gVG9nZ2xlIGhlaWdodCBhbmQgYWN0aXZlIGNsYXNzXG4gICAgICAgICAgICAgICAgY29uc3QgaXNBY3RpdmUgPSBtZW51LmNsYXNzTGlzdC5jb250YWlucygnbmF2LWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIG1lbnUuc3R5bGUuaGVpZ2h0ID0gaXNBY3RpdmUgPyAnMCcgOiBgJHtoZWlnaHR9cHhgO1xuICAgICAgICAgICAgICAgIG1lbnUuY2xhc3NMaXN0LnRvZ2dsZSgnbmF2LWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIGl0ZW0uY2xhc3NMaXN0LnRvZ2dsZSgnbmF2LWFjdGl2ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcblxufVxuXG5cbmZ1bmN0aW9uIHNoaWZ0Rm9jdXMoc2VsZWN0b3IpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBrZWVwRm9jdXNJbnNpZGVEaXYoKSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGxldCBmb2N1c2FibGVFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5uYXYtbWFpbl9fd3JhcCBhLCAubmF2LW1haW5fX3dyYXAgYnV0dG9uLCAubmF2LW1haW5fX3dyYXAgaW5wdXQsIC5uYXYtbWFpbl9fd3JhcCBzZWxlY3QsIC5uYXYtbWFpbl9fd3JhcCB0ZXh0YXJlYSwgLm5hdi1tYWluX193cmFwIFt0YWJpbmRleF06bm90KFt0YWJpbmRleD1cIi0xXCJdKScpO1xuICAgICAgICBmb2N1c2FibGVFbGVtZW50cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZvY3VzYWJsZUVsZW1lbnRzKTtcblxuICAgICAgICBsZXQgZmlyc3RFbGVtZW50ID0gZm9jdXNhYmxlRWxlbWVudHNbMF07XG4gICAgICAgIGxldCBsYXN0RWxlbWVudCA9IGZvY3VzYWJsZUVsZW1lbnRzW2ZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIGlmIChlLmtleSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICAgIGlmIChlLnNoaWZ0S2V5KSAvKiBTaGlmdCArIFRhYiAqLyB7XG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGZpcnN0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIC8qIFRhYiAqLyB7XG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGxhc3RFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlTWVudUVzYygpIHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIgfHwgZXZlbnQua2V5ID09PSBcIkVzY1wiKSB7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgICAgICAgICAgIGlmIChib2R5LmNsYXNzTGlzdC5jb250YWlucygnbmF2LWFjdGl2ZScpKSB7XG4gICAgICAgICAgICAgICAgYm9keS5jbGFzc0xpc3QucmVtb3ZlKCduYXYtYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLXRvZ2dsZU5hdicpLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qcy10b2dnbGVOYXYnKS5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICBzaGlmdEZvY3VzKCcuanMtdG9nZ2xlTmF2Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn0iLCJpbXBvcnQgeyB1X3Rocm90dGxlZCB9IGZyb20gJy4uL3V0aWxzL3V0aWxzJztcblxuLyoqXG4gKiBBZGQgY2xhc3Mgb24gc2Nyb2xsIGZvciBzdGlja3kgaGVhZGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gZWwgLSBzZWxlY3RvciBmb3IgYWRkaW5nIGFuIGFjdGl2ZSBjbGFzc1xuICogQHBhcmFtIHtzdHJpbmd9IGVsQ2xhc3MgLSBhY3RpdmUgY2xhc3NcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RpY2t5SGVhZGVyKGVsLCBlbENsYXNzKSB7XG5cbiAgICBjb25zdCAkJGhlYWRlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpO1xuICAgIGNvbnN0IGVsSGVpZ2h0ID0gMTA7XG4gICAgY29uc3Qgb2Zmc2V0ID0gcGFyc2VJbnQoZWxIZWlnaHQgLyA1KTtcblxuXG4gICAgY29uc3Qgb25TY3JvbGwgPSAoKSA9PiB7XG4gICAgICAgIGlmICh3aW5kb3cucGFnZVlPZmZzZXQgPiAoZWxIZWlnaHQgKyBvZmZzZXQpKSB7XG4gICAgICAgICAgICAkJGhlYWRlci5jbGFzc0xpc3QuYWRkKGVsQ2xhc3MpO1xuICAgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5wYWdlWU9mZnNldCA8IChlbEhlaWdodCAtIG9mZnNldCkpIHtcbiAgICAgICAgICAgICQkaGVhZGVyLmNsYXNzTGlzdC5yZW1vdmUoZWxDbGFzcyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdGhyb3R0bGVTY3JvbGwgPSB1X3Rocm90dGxlZCgoKSA9PiB7XG4gICAgICAgIG9uU2Nyb2xsKCk7XG4gICAgfSwgMzApO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+IHtcbiAgICAgICAgdGhyb3R0bGVTY3JvbGwoKTtcbiAgICB9KTtcblxuICAgIGlmICh3aW5kb3cucGFnZVlPZmZzZXQgPiAoZWxIZWlnaHQgKyBvZmZzZXQpKSB7XG4gICAgICAgICQkaGVhZGVyLmNsYXNzTGlzdC5hZGQoZWxDbGFzcyk7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQge3Vfc2xpZGVEb3duLCB1X3NsaWRlVXB9IGZyb20gXCIuLi91dGlscy91X3NsaWRlLXVwLWRvd25cIjtcblxuY29uc3QgdG9nZ2xlU3VibWVudSA9ICgpID0+IHtcblxuICAgIGxldCBzZWxlY3RvciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5mb290ZXItbmF2Jyk7XG5cbiAgICBsZXQgaXRlbXM7XG4gICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgIGl0ZW1zID0gc2VsZWN0b3IucXVlcnlTZWxlY3RvckFsbCgnLmZvb3Rlci1uYXYgLm1lbnUtaXRlbS1oYXMtY2hpbGRyZW4nKTtcbiAgICB9XG5cbiAgICBpZihpdGVtcykge1xuXG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGJ0biwgaSkgPT4ge1xuXG4gICAgICAgICAgICBsZXQgc3VibWVudSA9IGJ0bi5xdWVyeVNlbGVjdG9yKCcuc3ViLW1lbnUnKTtcbiAgICAgICAgICAgIGJ0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgIHVfc2xpZGVVcChzdWJtZW51KTtcblxuXG4gICAgICAgICAgICBidG4uZmlyc3RFbGVtZW50Q2hpbGQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGlmKGV2LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdhJykge1xuICAgICAgICAgICAgICAgICAgICAvL3JldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZihidG4uY2xhc3NMaXN0LmNvbnRhaW5zKCdpcy10b2dnbGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdV9zbGlkZVVwKHN1Ym1lbnUpO1xuICAgICAgICAgICAgICAgICAgICBidG4uY2xhc3NMaXN0LnJlbW92ZSgnaXMtdG9nZ2xlZCcpO1xuICAgICAgICAgICAgICAgICAgICBidG4uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKCAoaXRlbSAsIGopID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdWJtZW51ID0gaXRlbS5xdWVyeVNlbGVjdG9yKCcuc3ViLW1lbnUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKCdpcy10b2dnbGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X3NsaWRlVXAoc3VibWVudSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdpcy10b2dnbGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJ0bi5jbGFzc0xpc3QuYWRkKCdpcy10b2dnbGVkJyk7XG4gICAgICAgICAgICAgICAgICAgIGJ0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgICAgICB1X3NsaWRlRG93bihzdWJtZW51KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cbn1cblxuZXhwb3J0IHtcbiAgICB0b2dnbGVTdWJtZW51XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBsaW5lYnJlYWstc3R5bGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cblxuLypcbiAqIEB0aXRsZSBNYWluIEFwcFxuICogQGRlc2NyaXB0aW9uIEFwcGxpY2F0aW9uIGVudHJ5IHBvaW50XG4gKi9cblxuLy8gSGVhZGVyXG5pbXBvcnQgeyBzdGlja3lIZWFkZXIgfSBmcm9tICcuL2hlYWRlci9zdGlja3ktaGVhZGVyJztcbi8vIGltcG9ydCB7IHNlYXJjaE92ZXJsYXkgfSBmcm9tICcuL2hlYWRlci9zZWFyY2gtb3ZlcmxheSc7XG5pbXBvcnQgeyBtb2JpbGVOYXYgfSBmcm9tICcuL2hlYWRlci9tb2JpbGUtbmF2JztcbmltcG9ydCB7IHRvZ2dsZVN1Ym1lbnUgfSBmcm9tICcuL2hlYWRlci90b2dnbGUtc3VibWVudSc7XG5cbi8vIGZ1bmN0aW9uIGNhbGxzXG5pbXBvcnQgeyBjYWxsU2xpZGVycyB9IGZyb20gJy4vZnVuY3Rpb24tY2FsbHMvc2xpZGVycyc7XG5pbXBvcnQgeyBjYWxsQWNjb3JkaW9ucyB9IGZyb20gJy4vZnVuY3Rpb24tY2FsbHMvYWNjb3JkaW9ucyc7XG5pbXBvcnQgeyBjYWxsVGFiQWNjb3JkaW9uc01vYmlsZSB9IGZyb20gJy4vZnVuY3Rpb24tY2FsbHMvdGFicy10by1hY2NvcmRpb24tbW9iaWxlJztcblxuLy8gY29tcG9uZW50c1xuaW1wb3J0IGhlcm9QbGF5ZXIgZnJvbSAnLi9jb21wb25lbnRzL2hlcm8tcGxheWVyJztcbmltcG9ydCBoaWRlX2JveF9jdGFfd2lkZ2V0IGZyb20gJy4vY29tcG9uZW50cy9ib3gtY3RhLXdpZGdldC1jb29raWUnO1xuLy8gaW1wb3J0IG9wZW5DYXNlU3R1ZHkgZnJvbSAnLi9jb21wb25lbnRzL29wZW4tY2FzZS1zdHVkeSc7XG4vLyBpbXBvcnQgd2hpdGVwYXBlclBvcHVwIGZyb20gJy4vY29tcG9uZW50cy93aGl0ZXBhcGVyLWZvcm0nO1xuaW1wb3J0IHJlYWRNb3JlWCBmcm9tICcuL2NvbXBvbmVudHMvcmVhZC1tb3JlJztcbmltcG9ydCByZWFkTW9yZSBmcm9tICcuL2Z1bmN0aW9uLWNhbGxzL3RpbnltY2UtcmVhZC1tb3JlL3JlYWQtbW9yZSc7XG5pbXBvcnQgeyBsb2FkTW9yZVByb2plY3RzIH0gZnJvbSAnLi9jb21wb25lbnRzL2xvYWQtbW9yZS1wcm9qZWN0cyc7XG5pbXBvcnQgeyBsb2FkTW9yZVBvc3RzIH0gZnJvbSBcIi4vbG9hZC1tb3JlL2xvYWQtbW9yZS1wb3N0c1wiO1xuaW1wb3J0IG1vcmVDYXNlU3R1ZGllcyBmcm9tICcuL2NvbXBvbmVudHMvY2FzZS1zdHVkaWVzJztcbmltcG9ydCB7IHRvZ2dsZVNlYXJjaCB9IGZyb20gJy4vY29tcG9uZW50cy9zaXRlLXNlYXJjaCc7XG4vLyBpbXBvcnQgUG9wdXBzRm9ybXMgZnJvbSAnLi9jb21wb25lbnRzL3BvcHVwcy1mb3JtJztcbmltcG9ydCB7IGJhY2tUb1RvcCB9IGZyb20gJy4vY29tcG9uZW50cy9iYWNrLXRvLXRvcCc7XG5pbXBvcnQgeyBwcm9ncmVzc0JhclNjcm9sbCB9IGZyb20gJy4vY29tcG9uZW50cy9wcm9ncmVzcy1iYXInO1xuaW1wb3J0IHsgdG9nZ2xlRWxlbWVudCB9IGZyb20gJy4vY29tcG9uZW50cy90b2dnbGUtZWxlbWVudCc7XG5pbXBvcnQgeyB0YWJzVW5kZXJsaW5lIH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYnMtdW5kZXJsaW5lJztcbmltcG9ydCBjYXNlU3R1ZHlUYWJzIGZyb20gJy4vY29tcG9uZW50cy9jYXNlLXN0dWR5LXRhYnMnO1xuaW1wb3J0IHsgYmFDb2xsYXBzZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvYmEtY29sbGFwc2VyJztcbmltcG9ydCB7IGV4cGFuZEltYWdlIH0gZnJvbSAnLi9jb21wb25lbnRzL2V4cGFuZC1pbWFnZSc7XG5pbXBvcnQgeyBmb290ZXJIb3ZlciB9IGZyb20gJy4vY29tcG9uZW50cy9mb290ZXItaG92ZXInO1xuLy8gaW1wb3J0IHsgcmFxUG9wdXAgfSBmcm9tICcuL2NvbXBvbmVudHMvcG9wdXAtcmFxJztcbmltcG9ydCB7IGF1dG9UYWJzIH0gZnJvbSAnLi9jb21wb25lbnRzL2F1dG8tdGFicyc7XG5pbXBvcnQgeyBsb2NhdGlvbkFjY29yZGlvbiB9IGZyb20gJy4vY29tcG9uZW50cy9sb2NhdGlvbi1hY2NvcmRpb24nO1xuaW1wb3J0IHsgZ0Zvcm1zIH0gZnJvbSAnLi9jb21wb25lbnRzL2ctZm9ybXMnO1xuaW1wb3J0IHsgZm9vdEFjY29yZGlvbiB9IGZyb20gJy4vY29tcG9uZW50cy9mb290LWFjY29yZGlvbic7XG4vLyBpbXBvcnQgeyBuYXZKdW1wZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvbmF2LWp1bXBlcic7XG5pbXBvcnQgeyBleHBhbmRCQUltYWdlIH0gZnJvbSAnLi9jb21wb25lbnRzL2JhLXNpbmdsZSc7XG5pbXBvcnQgeyBmYWtlRm9vdGVyTWVudSB9IGZyb20gJy4vY29tcG9uZW50cy9mYWtlLW1lbnUnO1xuaW1wb3J0IGxvYWRNb3JlU29sdXRpb25zIGZyb20gJy4vY29tcG9uZW50cy9sb2FkLW1vcmUtc29sdXRpb25zJztcbmltcG9ydCBjb252ZXJzaW9uc0NhbGN1bGF0b3IgZnJvbSAnLi9jb21wb25lbnRzL2NvbnYtY2FsYyc7XG5pbXBvcnQgeyBwcmljZUNhbGN1bGF0b3JXaWRnZXQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2FsY3VsYXRvci13aWRnZXQuanMnO1xuaW1wb3J0IHsgcHJpY2VDYWxjdWxhdG9yIH0gZnJvbSAnLi9jb21wb25lbnRzL2NhbGN1bGF0b3InO1xuXG5cbmltcG9ydCB7IGxvZ29TbGlkZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvbG9nby1zbGlkZXInO1xuXG5pbXBvcnQgeyBzdGlja3lQb3BVcCB9IGZyb20gJy4vY29tcG9uZW50cy9zdGlja3ktd2hpdGVwYXBlcic7XG5cbmltcG9ydCB7IHBhdXNlSGVyb0FuaW1hdGlvbnMgfSBmcm9tICcuL2NvbXBvbmVudHMvcGF1c2UtaGVyby1hbmltJztcblxuaW1wb3J0IHsgbWVudUhvdmVyIH0gZnJvbSAnLi9jb21wb25lbnRzL21lbnUtaG92ZXItZWZmZWN0JztcblxuaW1wb3J0IHsgc2Nyb2xsZXIyNCB9IGZyb20gJy4vY29tcG9uZW50cy9zY3JvbGxlcic7XG5cbi8vIGltcG9ydCB7IHRhYnNUb1NsaWRlciB9IGZyb20gJy4vY29tcG9uZW50cy90YWJzLXRvLXNsaWRlcic7XG4vLyB1dGlsc1xuLy8gaW1wb3J0IHsgaGVyb0hvbWVTY3JvbGwgfSBmcm9tIFwiLi9saWJyYXJ5L2FuaW1hdGlvbnMvaGVyby1ob21lLXNjcm9sbFwiO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXG5pbXBvcnQgeyB1X2FkZFRvdWNoVG9IdG1sIH0gZnJvbSAnLi91dGlscy91X2lzLXRvdWNoLWRldmljZSc7XG5cbi8vIGxpYnJhcmllc1xuaW1wb3J0IFRhYkFjY29yZGlvbiBmcm9tICcuL2xpYnJhcnkvdGFicy1hY2NvcmRpb25zL3RhYi1hY2NvcmRpb24nO1xuXG5pbXBvcnQgRFNNUFRhYiBmcm9tICcuL2xpYnJhcnkvdGFicy1hY2NvcmRpb25zL3RhYi1zaW5nbGUnO1xuaW1wb3J0IERTTVBUYWJzVGFiIGZyb20gJy4vbGlicmFyeS90YWJzLWFjY29yZGlvbnMvRFNNUFRhYnMtdGFiJztcbmltcG9ydCBEU01QVGFic0Ryb3Bkb3duIGZyb20gJy4vbGlicmFyeS90YWJzLWFjY29yZGlvbnMvRFNNUFRhYnMtZHJvcGRvd24nO1xuaW1wb3J0IERTTVBUYWJzVGFiRHJvcGRvd24gZnJvbSAnLi9saWJyYXJ5L3RhYnMtYWNjb3JkaW9ucy9EU01QVGFicy10YWJkcm9wZG93bic7XG5cbmltcG9ydCBEU01QTWVkaWFDb250cm9scyBmcm9tICcuL2xpYnJhcnkvbWVkaWEtY29udHJvbHMvbWVkaWEtY29udHJvbCc7XG5cbmltcG9ydCBQdXJlQ291bnRlciBmcm9tICcuL2xpYnJhcnkvY291bnRlcnMvcHVyZWNvdW50ZXInO1xuaW1wb3J0IGdyaWRkZXJJbml0IGZyb20gJy4vbGlicmFyeS9jb2xsYXBzZXJzL2dyaWRkZXItaW5pdCc7XG5cbi8vIEZ1bmN0aW9uIGNhbGxzXG5pbXBvcnQgeyBib3hDdGFQb3NpdGlvbiB9IGZyb20gJy4vZnVuY3Rpb24tY2FsbHMvYm94LWN0YS1wb3NpdGlvbic7XG5cbi8vIEVmZmVjdHNcbmltcG9ydCB7IHNjcm9sbEFuaW1hdGlvbnMgfSBmcm9tIFwiLi92aXN1YWxzL3Njcm9sbC1hbmltYXRpb25zXCI7XG5pbXBvcnQgeyB2aWRlb0hvdmVyIH0gZnJvbSBcIi4vdmlzdWFscy92aWRlby1ob3ZlclwiO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L3ByZWZlci1kZWZhdWx0LWV4cG9ydFxuZXhwb3J0IGZ1bmN0aW9uIGZ1bmsoKSB7XG4gIHJldHVybiBkc0FqYXg7XG59XG5cbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7XG4gIC8vIGNoZWNrIHdoZXRoZXIgaXQgaXMgdG91Y2ggZGV2aWNlIG9yIG5vdFxuICB1X2FkZFRvdWNoVG9IdG1sKCk7XG5cbiAgLy9SZXBvc2l0aW9uIGJveCBjdGEgaWYgdGhlIGlzIFRPQ1xuICBib3hDdGFQb3NpdGlvbigpO1xuXG4gIC8vIEhlYWRlclxuICBzdGlja3lIZWFkZXIoJy5zaXRlLWhlYWRlcicsICdpcy1zdGlja3knKTtcbiAgLy8gc2VhcmNoT3ZlcmxheSgpO1xuICBtb2JpbGVOYXYoJy5qcy10b2dnbGVOYXYnLCAnLmpzLW1lbnUtZHJvcGRvd24tdG9nZ2xlJyk7XG4gIGlmICh3aW5kb3cubWF0Y2hNZWRpYSgnKG1heC13aWR0aDogMTAyNHB4KScpLm1hdGNoZXMpIHtcbiAgICB0b2dnbGVTdWJtZW51KCk7XG4gIH1cblxuICBuZXcgUHVyZUNvdW50ZXIoe1xuICAgIHNlbGVjdG9yOiAnLmpzLWNvdW50ZXItbnVtYmVyJyxcbiAgfSk7XG5cbiAgbmV3IFRhYkFjY29yZGlvbigpO1xuXG4gIGdyaWRkZXJJbml0KCk7XG5cbiAgbmV3IERTTVBNZWRpYUNvbnRyb2xzKCk7XG5cbiAgY2FsbFNsaWRlcnMoKTtcbiAgY2FsbEFjY29yZGlvbnMoKTtcbiAgLy8gY2FsbEFjY29yZGlvbnNMaWdodCgpO1xuXG4gIGxvYWRNb3JlUG9zdHMoKTtcblxuICAvLyBjb21wb25lbnRzXG4gIGhlcm9QbGF5ZXIoJy52aWRlb1BsYXllcicpO1xuICAvLyBvcGVuQ2FzZVN0dWR5KCk7XG4gIC8vIHdoaXRlcGFwZXJQb3B1cCgpO1xuICByZWFkTW9yZVgoKTtcbiAgcmVhZE1vcmUoKTtcbiAgbG9hZE1vcmVQcm9qZWN0cyhkc0FqYXgpO1xuICBtb3JlQ2FzZVN0dWRpZXMoZHNBamF4KTtcbiAgdG9nZ2xlU2VhcmNoKCcuanMtc2VhcmNoVG9nZ2xlJyk7XG4gIC8vIFBvcHVwc0Zvcm1zKCk7XG4gIGJhY2tUb1RvcCgnYmFja1RvVG9wJyk7XG4gIHByb2dyZXNzQmFyU2Nyb2xsKCk7XG4gIHRvZ2dsZUVsZW1lbnQoJ2pzLXRvZ2dsZUVsZW1lbnQnLCAnanMtdG9nZ2xlVHJpZ2dlcicpO1xuICB0YWJzVW5kZXJsaW5lKCk7XG4gIGNhc2VTdHVkeVRhYnMoKTtcbiAgYmFDb2xsYXBzZXIoJy5qcy12aWV3LW1vcmUnLCAnLnMtYmVmb3JlLWFmdGVyJyk7XG4gIGV4cGFuZEltYWdlKCk7XG4gIC8vIHJhcVBvcHVwKCk7XG4gIGF1dG9UYWJzKCk7XG4gIGxvY2F0aW9uQWNjb3JkaW9uKCk7XG5cbiAgZ0Zvcm1zKCk7XG4gIGZvb3RBY2NvcmRpb24oKTtcbiAgLy8gbmF2SnVtcGVyKCk7XG5cbiAgZmFrZUZvb3Rlck1lbnUoKTtcbiAgbG9hZE1vcmVTb2x1dGlvbnMoKTtcbiAgY29udmVyc2lvbnNDYWxjdWxhdG9yKCk7XG5cbiAgZXhwYW5kQkFJbWFnZSgpO1xuXG4gIHByaWNlQ2FsY3VsYXRvcldpZGdldCgpO1xuICBwcmljZUNhbGN1bGF0b3IoKTtcblxuICBzdGlja3lQb3BVcCgpO1xuXG4gIHBhdXNlSGVyb0FuaW1hdGlvbnMoKTtcblxuICBtZW51SG92ZXIoKTtcblxuICBpZiAoJChcImJvZHlcIikuaGFzQ2xhc3MoXCJob21lXCIpKSB7XG4gICAgLy8gaGVyb0hvbWVTY3JvbGwoKTtcbiAgfVxuXG4gIGxvZ29TbGlkZXIoKTtcblxuICBuZXcgRFNNUFRhYigpO1xuICBuZXcgRFNNUFRhYnNUYWIoKTtcbiAgbmV3IERTTVBUYWJzRHJvcGRvd24oKTtcbiAgbmV3IERTTVBUYWJzVGFiRHJvcGRvd24oKTtcblxuICBjYWxsVGFiQWNjb3JkaW9uc01vYmlsZSgpO1xuICBzY3JvbGxBbmltYXRpb25zKCk7XG5cblxuICBzY3JvbGxlcjI0KCk7XG5cblxuXG5cblxuICAvLyBJbml0aWFsaXplIHRoZSBjbGFzcyBvbiBET00gY29udGVudCBsb2FkXG4gIG5ldyBoaWRlX2JveF9jdGFfd2lkZ2V0KCk7XG5cblxuICBpZiAod2luZG93Lm1hdGNoTWVkaWEoXCIobWluLXdpZHRoOiAxMDI1cHgpXCIpLm1hdGNoZXMpIHtcblxuICAgIHZpZGVvSG92ZXIoKTtcbiAgICBmb290ZXJIb3ZlcigpO1xuICB9XG5cbn0pO1xuJCh3aW5kb3cpLm9uKFwicmVzaXplXCIsIGZ1bmN0aW9uICgpIHtcbiAgZm9vdEFjY29yZGlvbigpO1xufSk7XG4vLyBWZW5kb3JzIGxpYnNcblxuY29uc3QgbXlMYXp5TG9hZCA9IG5ldyBMYXp5TG9hZCh7XG4gIGVsZW1lbnRzX3NlbGVjdG9yOiAnLmxhenknLFxufSk7XG5cbndpbmRvdy5teUxhenlMb2FkID0gbXlMYXp5TG9hZDtcblxuLyoqIEZpeCBqUXVlcnkgcGFzc2l2ZSBsaXN0ZW5lcnMgKi9cbmpRdWVyeS5ldmVudC5zcGVjaWFsLnRvdWNoc3RhcnQgPSB7XG4gIHNldHVwKF8sIG5zLCBoYW5kbGUpIHtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBoYW5kbGUsIHsgcGFzc2l2ZTogIW5zLmluY2x1ZGVzKCdub1ByZXZlbnREZWZhdWx0JykgfSk7XG4gIH0sXG59O1xualF1ZXJ5LmV2ZW50LnNwZWNpYWwudG91Y2htb3ZlID0ge1xuICBzZXR1cChfLCBucywgaGFuZGxlKSB7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBoYW5kbGUsIHsgcGFzc2l2ZTogIW5zLmluY2x1ZGVzKCdub1ByZXZlbnREZWZhdWx0JykgfSk7XG4gIH0sXG59O1xualF1ZXJ5LmV2ZW50LnNwZWNpYWwud2hlZWwgPSB7XG4gIHNldHVwKF8sIG5zLCBoYW5kbGUpIHtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgaGFuZGxlLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gIH0sXG59O1xualF1ZXJ5LmV2ZW50LnNwZWNpYWwubW91c2V3aGVlbCA9IHtcbiAgc2V0dXAoXywgbnMsIGhhbmRsZSkge1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V3aGVlbCcsIGhhbmRsZSwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICB9LFxufTtcblxuLy8gQWNjZXNzaWJpbGl0eSBQYXRjaGVzXG5pbXBvcnQgeyB0YWJzVGFiRHJvcCB9IGZyb20gJy4vcGF0Y2hlcy90YWJzVGFiRHJvcC5qcyc7XG50YWJzVGFiRHJvcCgpOyIsIi8qKlxuICogaHR0cHM6Ly9naXRodWIuY29tL2phbnJlbWJvbGQvZXM2LWVhc2luZ3NcbiAqXG4gKiB1c2FnZSA6IGltcG9ydCB7ZWFzZUluT3V0UXVhZH0gZnJvbSAnZWFzaW5ncyc7XG4gKi9cblxuZXhwb3J0IGNvbnN0IGVhc2VPdXRRdWFkID0gKHQsIGIsIGMsIGQpID0+IHtcbiAgICByZXR1cm4gLWMgKiAodCAvPSBkKSAqICh0IC0gMikgKyBiO1xufTtcbmV4cG9ydCBjb25zdCBlYXNlSW5RdWFkID0gKHQsIGIsIGMsIGQpID0+IHtcbiAgICByZXR1cm4gYyAqICh0IC89IGQpICogdCArIGI7XG59O1xuZXhwb3J0IGNvbnN0IGVhc2VJbk91dFF1YWQgPSAodCwgYiwgYywgZCkgPT4ge1xuICAgIGlmICgodCAvPSBkIC8gMikgPCAxKVxuICAgICAgICByZXR1cm4gYyAvIDIgKiB0ICogdCArIGI7XG4gICAgcmV0dXJuIC1jIC8gMiAqICgoLS10KSAqICh0IC0gMikgLSAxKSArIGI7XG59O1xuZXhwb3J0IGNvbnN0IGVhc2VJbkN1YmljID0gKHQsIGIsIGMsIGQpID0+IHtcbiAgICByZXR1cm4gYyAqICh0IC89IGQpICogdCAqIHQgKyBiO1xufTtcbmV4cG9ydCBjb25zdCBlYXNlT3V0Q3ViaWMgPSAodCwgYiwgYywgZCkgPT4ge1xuICAgIHJldHVybiBjICogKCh0ID0gdCAvIGQgLSAxKSAqIHQgKiB0ICsgMSkgKyBiO1xufTtcbmV4cG9ydCBjb25zdCBlYXNlSW5PdXRDdWJpYyA9ICh0LCBiLCBjLCBkKSA9PiB7XG4gICAgaWYgKCh0IC89IGQgLyAyKSA8IDEpXG4gICAgICAgIHJldHVybiBjIC8gMiAqIHQgKiB0ICogdCArIGI7XG4gICAgcmV0dXJuIGMgLyAyICogKCh0IC09IDIpICogdCAqIHQgKyAyKSArIGI7XG59O1xuZXhwb3J0IGNvbnN0IGVhc2VJblF1YXJ0ID0gKHQsIGIsIGMsIGQpID0+IHtcbiAgICByZXR1cm4gYyAqICh0IC89IGQpICogdCAqIHQgKiB0ICsgYjtcbn07XG5leHBvcnQgY29uc3QgZWFzZU91dFF1YXJ0ID0gKHQsIGIsIGMsIGQpID0+IHtcbiAgICByZXR1cm4gLWMgKiAoKHQgPSB0IC8gZCAtIDEpICogdCAqIHQgKiB0IC0gMSkgKyBiO1xufTtcbmV4cG9ydCBjb25zdCBlYXNlSW5PdXRRdWFydCA9ICh0LCBiLCBjLCBkKSA9PiB7XG4gICAgaWYgKCh0IC89IGQgLyAyKSA8IDEpXG4gICAgICAgIHJldHVybiBjIC8gMiAqIHQgKiB0ICogdCAqIHQgKyBiO1xuICAgIHJldHVybiAtYyAvIDIgKiAoKHQgLT0gMikgKiB0ICogdCAqIHQgLSAyKSArIGI7XG59O1xuZXhwb3J0IGNvbnN0IGVhc2VJblF1aW50ID0gKHQsIGIsIGMsIGQpID0+IHtcbiAgICByZXR1cm4gYyAqICh0IC89IGQpICogdCAqIHQgKiB0ICogdCArIGI7XG59O1xuZXhwb3J0IGNvbnN0IGVhc2VPdXRRdWludCA9ICh0LCBiLCBjLCBkKSA9PiB7XG4gICAgcmV0dXJuIGMgKiAoKHQgPSB0IC8gZCAtIDEpICogdCAqIHQgKiB0ICogdCArIDEpICsgYjtcbn07XG5leHBvcnQgY29uc3QgZWFzZUluT3V0UXVpbnQgPSAodCwgYiwgYywgZCkgPT4ge1xuICAgIGlmICgodCAvPSBkIC8gMikgPCAxKVxuICAgICAgICByZXR1cm4gYyAvIDIgKiB0ICogdCAqIHQgKiB0ICogdCArIGI7XG4gICAgcmV0dXJuIGMgLyAyICogKCh0IC09IDIpICogdCAqIHQgKiB0ICogdCArIDIpICsgYjtcbn07XG5leHBvcnQgY29uc3QgZWFzZUluU2luZSA9ICh0LCBiLCBjLCBkKSA9PiB7XG4gICAgcmV0dXJuIC1jICogTWF0aC5jb3ModCAvIGQgKiAoTWF0aC5QSSAvIDIpKSArIGMgKyBiO1xufTtcbmV4cG9ydCBjb25zdCBlYXNlT3V0U2luZSA9ICh0LCBiLCBjLCBkKSA9PiB7XG4gICAgcmV0dXJuIGMgKiBNYXRoLnNpbih0IC8gZCAqIChNYXRoLlBJIC8gMikpICsgYjtcbn07XG5leHBvcnQgY29uc3QgZWFzZUluT3V0U2luZSA9ICh0LCBiLCBjLCBkKSA9PiB7XG4gICAgcmV0dXJuIC1jIC8gMiAqIChNYXRoLmNvcyhNYXRoLlBJICogdCAvIGQpIC0gMSkgKyBiO1xufTtcbmV4cG9ydCBjb25zdCBlYXNlSW5FeHBvID0gKHQsIGIsIGMsIGQpID0+IHtcbiAgICByZXR1cm4gKHQgPT0gMCkgPyBiIDogYyAqIE1hdGgucG93KDIsIDEwICogKHQgLyBkIC0gMSkpICsgYjtcbn07XG5leHBvcnQgY29uc3QgZWFzZU91dEV4cG8gPSAodCwgYiwgYywgZCkgPT4ge1xuICAgIHJldHVybiAodCA9PSBkKSA/IGIgKyBjIDogYyAqICgtTWF0aC5wb3coMiwgLTEwICogdCAvIGQpICsgMSkgKyBiO1xufTtcbmV4cG9ydCBjb25zdCBlYXNlSW5PdXRFeHBvID0gKHQsIGIsIGMsIGQpID0+IHtcbiAgICBpZiAodCA9PSAwKVxuICAgICAgICByZXR1cm4gYjtcbiAgICBpZiAodCA9PSBkKVxuICAgICAgICByZXR1cm4gYiArIGM7XG4gICAgaWYgKCh0IC89IGQgLyAyKSA8IDEpXG4gICAgICAgIHJldHVybiBjIC8gMiAqIE1hdGgucG93KDIsIDEwICogKHQgLSAxKSkgKyBiO1xuICAgIHJldHVybiBjIC8gMiAqICgtTWF0aC5wb3coMiwgLTEwICogLS10KSArIDIpICsgYjtcbn07XG5leHBvcnQgY29uc3QgZWFzZUluQ2lyYyA9ICh0LCBiLCBjLCBkKSA9PiB7XG4gICAgcmV0dXJuIC1jICogKE1hdGguc3FydCgxIC0gKHQgLz0gZCkgKiB0KSAtIDEpICsgYjtcbn07XG5leHBvcnQgY29uc3QgZWFzZU91dENpcmMgPSAodCwgYiwgYywgZCkgPT4ge1xuICAgIHJldHVybiBjICogTWF0aC5zcXJ0KDEgLSAodCA9IHQgLyBkIC0gMSkgKiB0KSArIGI7XG59O1xuZXhwb3J0IGNvbnN0IGVhc2VJbk91dENpcmMgPSAodCwgYiwgYywgZCkgPT4ge1xuICAgIGlmICgodCAvPSBkIC8gMikgPCAxKVxuICAgICAgICByZXR1cm4gLWMgLyAyICogKE1hdGguc3FydCgxIC0gdCAqIHQpIC0gMSkgKyBiO1xuICAgIHJldHVybiBjIC8gMiAqIChNYXRoLnNxcnQoMSAtICh0IC09IDIpICogdCkgKyAxKSArIGI7XG59O1xuZXhwb3J0IGNvbnN0IGVhc2VJbkVsYXN0aWMgPSAodCwgYiwgYywgZCkgPT4ge1xuICAgIHZhciBzID0gMS43MDE1ODtcbiAgICB2YXIgcCA9IDA7XG4gICAgdmFyIGEgPSBjO1xuICAgIGlmICh0ID09IDApXG4gICAgICAgIHJldHVybiBiO1xuICAgIGlmICgodCAvPSBkKSA9PSAxKVxuICAgICAgICByZXR1cm4gYiArIGM7XG4gICAgaWYgKCFwKVxuICAgICAgICBwID0gZCAqIC4zO1xuICAgIGlmIChhIDwgTWF0aC5hYnMoYykpIHtcbiAgICAgICAgYSA9IGM7XG4gICAgICAgIHZhciBzID0gcCAvIDQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgdmFyIHMgPSBwIC8gKDIgKiBNYXRoLlBJKSAqIE1hdGguYXNpbihjIC8gYSk7XG4gICAgcmV0dXJuIC0oYSAqIE1hdGgucG93KDIsIDEwICogKHQgLT0gMSkpICogTWF0aC5zaW4oKHQgKiBkIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkpICsgYjtcbn07XG5leHBvcnQgY29uc3QgZWFzZU91dEVsYXN0aWMgPSAodCwgYiwgYywgZCkgPT4ge1xuICAgIHZhciBzID0gMS43MDE1ODtcbiAgICB2YXIgcCA9IDA7XG4gICAgdmFyIGEgPSBjO1xuICAgIGlmICh0ID09IDApXG4gICAgICAgIHJldHVybiBiO1xuICAgIGlmICgodCAvPSBkKSA9PSAxKVxuICAgICAgICByZXR1cm4gYiArIGM7XG4gICAgaWYgKCFwKVxuICAgICAgICBwID0gZCAqIC4zO1xuICAgIGlmIChhIDwgTWF0aC5hYnMoYykpIHtcbiAgICAgICAgYSA9IGM7XG4gICAgICAgIHZhciBzID0gcCAvIDQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgdmFyIHMgPSBwIC8gKDIgKiBNYXRoLlBJKSAqIE1hdGguYXNpbihjIC8gYSk7XG4gICAgcmV0dXJuIGEgKiBNYXRoLnBvdygyLCAtMTAgKiB0KSAqIE1hdGguc2luKCh0ICogZCAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApICsgYyArIGI7XG59O1xuZXhwb3J0IGNvbnN0IGVhc2VJbk91dEVsYXN0aWMgPSAodCwgYiwgYywgZCkgPT4ge1xuICAgIHZhciBzID0gMS43MDE1ODtcbiAgICB2YXIgcCA9IDA7XG4gICAgdmFyIGEgPSBjO1xuICAgIGlmICh0ID09IDApXG4gICAgICAgIHJldHVybiBiO1xuICAgIGlmICgodCAvPSBkIC8gMikgPT0gMilcbiAgICAgICAgcmV0dXJuIGIgKyBjO1xuICAgIGlmICghcClcbiAgICAgICAgcCA9IGQgKiAoLjMgKiAxLjUpO1xuICAgIGlmIChhIDwgTWF0aC5hYnMoYykpIHtcbiAgICAgICAgYSA9IGM7XG4gICAgICAgIHZhciBzID0gcCAvIDQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgdmFyIHMgPSBwIC8gKDIgKiBNYXRoLlBJKSAqIE1hdGguYXNpbihjIC8gYSk7XG4gICAgaWYgKHQgPCAxKVxuICAgICAgICByZXR1cm4gLS41ICogKGEgKiBNYXRoLnBvdygyLCAxMCAqICh0IC09IDEpKSAqIE1hdGguc2luKCh0ICogZCAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApKSArIGI7XG4gICAgcmV0dXJuIGEgKiBNYXRoLnBvdygyLCAtMTAgKiAodCAtPSAxKSkgKiBNYXRoLnNpbigodCAqIGQgLSBzKSAqICgyICogTWF0aC5QSSkgLyBwKSAqIC41ICsgYyArIGI7XG59O1xuZXhwb3J0IGNvbnN0IGVhc2VJbkJhY2sgPSAodCwgYiwgYywgZCwgcyA9IDEuNzAxNTgpID0+IHtcbiAgICByZXR1cm4gYyAqICh0IC89IGQpICogdCAqICgocyArIDEpICogdCAtIHMpICsgYjtcbn07XG5leHBvcnQgY29uc3QgZWFzZU91dEJhY2sgPSAodCwgYiwgYywgZCwgcyA9IDEuNzAxNTgpID0+IHtcbiAgICByZXR1cm4gYyAqICgodCA9IHQgLyBkIC0gMSkgKiB0ICogKChzICsgMSkgKiB0ICsgcykgKyAxKSArIGI7XG59O1xuZXhwb3J0IGNvbnN0IGVhc2VJbk91dEJhY2sgPSAodCwgYiwgYywgZCwgcyA9IDEuNzAxNTgpID0+IHtcbiAgICBpZiAoKHQgLz0gZCAvIDIpIDwgMSlcbiAgICAgICAgcmV0dXJuIGMgLyAyICogKHQgKiB0ICogKCgocyAqPSAoMS41MjUpKSArIDEpICogdCAtIHMpKSArIGI7XG4gICAgcmV0dXJuIGMgLyAyICogKCh0IC09IDIpICogdCAqICgoKHMgKj0gKDEuNTI1KSkgKyAxKSAqIHQgKyBzKSArIDIpICsgYjtcbn07XG5leHBvcnQgY29uc3QgZWFzZUluQm91bmNlID0gKHQsIGIsIGMsIGQpID0+IHtcbiAgICByZXR1cm4gYyAtIGVhc2VPdXRCb3VuY2UoZCAtIHQsIDAsIGMsIGQpICsgYjtcbn07XG5leHBvcnQgY29uc3QgZWFzZU91dEJvdW5jZSA9ICh0LCBiLCBjLCBkKSA9PiB7XG4gICAgaWYgKCh0IC89IGQpIDwgKDEgLyAyLjc1KSkge1xuICAgICAgICByZXR1cm4gYyAqICg3LjU2MjUgKiB0ICogdCkgKyBiO1xuICAgIH1cbiAgICBlbHNlIGlmICh0IDwgKDIgLyAyLjc1KSkge1xuICAgICAgICByZXR1cm4gYyAqICg3LjU2MjUgKiAodCAtPSAoMS41IC8gMi43NSkpICogdCArIC43NSkgKyBiO1xuICAgIH1cbiAgICBlbHNlIGlmICh0IDwgKDIuNSAvIDIuNzUpKSB7XG4gICAgICAgIHJldHVybiBjICogKDcuNTYyNSAqICh0IC09ICgyLjI1IC8gMi43NSkpICogdCArIC45Mzc1KSArIGI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gYyAqICg3LjU2MjUgKiAodCAtPSAoMi42MjUgLyAyLjc1KSkgKiB0ICsgLjk4NDM3NSkgKyBiO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgZWFzZUluT3V0Qm91bmNlID0gKHQsIGIsIGMsIGQpID0+IHtcbiAgICBpZiAodCA8IGQgLyAyKVxuICAgICAgICByZXR1cm4gZWFzZUluQm91bmNlKHQgKiAyLCAwLCBjLCBkKSAqIC41ICsgYjtcbiAgICByZXR1cm4gZWFzZU91dEJvdW5jZSh0ICogMiAtIGQsIDAsIGMsIGQpICogLjUgKyBjICogLjUgKyBiO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8qKlxuICogVE9ETzogcmV3b3JrIGl0IHRvIHVzZSByZXF1ZXN0IGFuaW1hdGlvbiBmcmFtZVxuICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE0NzQ2Nzgvc2Nyb2xsdG9wLWFuaW1hdGlvbi13aXRob3V0LWpxdWVyeVxuICpcbiAqIHRha2VuIGZyb21cbiAqIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2FuZGpvc2gvNjc2NDkzOVxuICogaHR0cHM6Ly9naXRodWIuY29tL2FsdmFyb3RyaWdvL3Nrcm9sbFRvcC5qcy9ibG9iL21hc3Rlci9za3JvbGxUb3AuanNcbiAqXG4gKi9cbk1hdGguZWFzZUluT3V0Q3ViaWMgPSBmdW5jdGlvbiAodCwgYiwgYywgZCkge1xuICAgIGlmICgodC89ZC8yKSA8IDEpIHJldHVybiBjLzIqdCp0KnQgKyBiO3JldHVybiBjLzIqKCh0LT0yKSp0KnQgKyAyKSArIGI7XG59O1xuXG5leHBvcnQgY29uc3Qgc2Nyb2xsVG9VdGlsID0gKHBhcmFtcykgPT4ge1xuICAgIGxldCBlbGVtZW50ID0gdHlwZW9mIHBhcmFtcy5lbGVtZW50ICE9PSAndW5kZWZpbmVkJyA/IHBhcmFtcy5lbGVtZW50IDogd2luZG93O1xuICAgIGxldCB0byA9IHBhcmFtcy50bztcbiAgICBsZXQgZHVyYXRpb24gPSB0eXBlb2YgcGFyYW1zLmR1cmF0aW9uICE9PSAndW5kZWZpbmVkJyA/IHBhcmFtcy5kdXJhdGlvbiA6IDI1MDtcbiAgICBsZXQgY2FsbGJhY2sgPSB0eXBlb2YgcGFyYW1zLmNhbGxiYWNrICE9PSAndW5kZWZpbmVkJyA/IHBhcmFtcy5jYWxsYmFjayA6IG51bGw7XG4gICAgbGV0IGVhc2luZyA9IHR5cGVvZiBwYXJhbXMuZWFzaW5nICE9PSAndW5kZWZpbmVkJyA/IHBhcmFtcy5lYXNpbmcgOiBNYXRoLmVhc2VJbk91dEN1YmljO1xuXG4gICAgbGV0IHN0YXJ0ID0gZWxlbWVudCE9PXdpbmRvdyA/IGVsZW1lbnQuc2Nyb2xsVG9wIDogKHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKSAgLSAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFRvcCB8fCAwKTtcbiAgICBsZXQgY2hhbmdlID0gdG8gLSBzdGFydDtcbiAgICBsZXQgY3VycmVudFRpbWUgPSAwO1xuICAgIGxldCBpbmNyZW1lbnQgPSAxNjsgLy9zYW1lIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgYXMgcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG5cbiAgICBjb25zdCBhbmltYXRlU2Nyb2xsID0gKCkgPT4ge1xuXG4gICAgICAgIGN1cnJlbnRUaW1lICs9IGluY3JlbWVudDtcbiAgICAgICAgdmFyIGVhc2luZ1ZhbHVlID0gZHVyYXRpb24gPyBlYXNpbmcoY3VycmVudFRpbWUsIHN0YXJ0LCBjaGFuZ2UsIGR1cmF0aW9uKSA6IHRvO1xuICAgICAgICBlbGVtZW50LnNjcm9sbFRvKDAsIGVhc2luZ1ZhbHVlKTtcblxuICAgICAgICBpZiAoY3VycmVudFRpbWUgPCBkdXJhdGlvbikge1xuICAgICAgICAgICAgc2V0VGltZW91dChhbmltYXRlU2Nyb2xsLCBpbmNyZW1lbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKXtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYW5pbWF0ZVNjcm9sbCgpO1xufTtcbiIsImltcG9ydCB7YWR2YW5jZWRTbGlkZXJzfSBmcm9tIFwiLi4vLi4vZnVuY3Rpb24tY2FsbHMvc2xpZGVycy9zbGlkZXItYWR2YW5jZWRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ3JpZGRlckluaXQoKSB7XG5cbiAgICBjb25zdCBncmlkZGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLWdyaWRkZXInKTtcbiAgICBjb25zdCBncmlkZGVycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5qcy1ncmlkZGVyJyk7XG5cbiAgICBpZiAoZ3JpZGRlcikge1xuICAgICAgICBpZiAoalF1ZXJ5KCkuZ3JpZGRlckV4cGFuZGVyKSB7XG4gICAgICAgICAgICAkKCgpID0+IHtcbiAgICAgICAgICAgICAgICBncmlkZGVycy5mb3JFYWNoKChncmlkLCBpKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbCBHcmlkZGVyXG4gICAgICAgICAgICAgICAgICAgICQoZ3JpZCkuZ3JpZGRlckV4cGFuZGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbE9mZnNldDogODAsXG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxUbzogJ3BhbmVsJywgLy8gcGFuZWwgb3IgbGlzdGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblNwZWVkOiA0MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25FYXNpbmc6ICdlYXNlSW5PdXRFeHBvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dOYXY6IHRydWUsIC8vIFNob3cgTmF2aWdhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFRleHQ6ICcnLCAvLyBOZXh0IGJ1dHRvbiB0ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2VGV4dDogJycsIC8vIFByZXZpb3VzIGJ1dHRvbiB0ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9zZVRleHQ6ICdDbG9zZScsIC8vIENsb3NlIGJ1dHRvbiB0ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICBvblN0YXJ0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdyaWRkZXIgSW5pdGl0aWFsaXplZFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29udGVudCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZHZhbmNlZFNsaWRlcnMoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xvc2VkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdyaWRkZXIgQ2xvc2VkXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0RTTVAgRXJyb3I6IFBsZWFzZSBpbmNsdWRlIGdyaWRkZXIgbGlicmFyeScpO1xuICAgICAgICB9XG5cbiAgICB9XG59XG4iLCIvKipcbiAqIERTIENvdW50ZXIgIDEuMC4wXG4gKlxuICogYmFzZWQgb246IGh0dHBzOi8vZ2l0aHViLmNvbS9zcmV4aS9wdXJlY291bnRlcmpzXG4gKiBXcml0dGVuIG9uOiBBcHJpbCAxNSwgMjAyMVxuICpcbiAqIFVTQUdFOlxuICovXG5cbmNsYXNzIFB1cmVDb3VudGVyIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdHMgPSB7XG4gICAgICAgICAgICBzdGFydDogMCxcbiAgICAgICAgICAgIGVuZDogMTAwLFxuICAgICAgICAgICAgZHVyYXRpb246IDIwMDAsXG4gICAgICAgICAgICBkZWxheTogMTAsXG4gICAgICAgICAgICBvbmNlOiB0cnVlLFxuICAgICAgICAgICAgZGVjaW1hbHM6IDAsXG4gICAgICAgICAgICBsZWdhY3k6IHRydWUsXG4gICAgICAgICAgICBjdXJyZW5jeTogZmFsc2UsXG4gICAgICAgICAgICBjdXJyZW5jeXN5bWJvbDogZmFsc2UsXG4gICAgICAgICAgICBzZXBhcmF0b3I6IGZhbHNlLFxuICAgICAgICAgICAgc2VwYXJhdG9yc3ltYm9sOiAnLCcsXG4gICAgICAgICAgICBzZWxlY3RvcjogJy5wdXJlY291bnRlcidcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZGVmYXVsdHMsIG9wdGlvbnMgfHwge30pO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJFdmVudExpc3RlbmVycygpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWdPcHRpb25zLnNlbGVjdG9yKTtcbiAgICAgICAgdmFyIGludGVyc2VjdGlvblN1cHBvcnRlZCA9IHRoaXMuaW50ZXJzZWN0aW9uTGlzdGVuZXJTdXBwb3J0ZWQoKTtcblxuICAgICAgICBpZiAoaW50ZXJzZWN0aW9uU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICB2YXIgaW50ZXJzZWN0T2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIodGhpcy5hbmltYXRlRWxlbWVudHMuYmluZCh0aGlzKSwge1xuICAgICAgICAgICAgICAgIFwicm9vdFwiOiBudWxsLFxuICAgICAgICAgICAgICAgIFwicm9vdE1hcmdpblwiOiAnMjBweCcsXG4gICAgICAgICAgICAgICAgXCJ0aHJlc2hvbGRcIjogMC41XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpbnRlcnNlY3RPYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0ZUxlZ2FjeShlbGVtZW50cyk7XG5cbiAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0ZUxlZ2FjeShlbGVtZW50cyk7XG4gICAgICAgICAgICAgICAgfSwgeyBcInBhc3NpdmVcIjogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFuaW1hdGVMZWdhY3koZWxlbWVudHMpIHtcbiAgICAgICAgZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIHZhciBjb25maWcgPSB0aGlzLnBhcnNlQ29uZmlnKGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYoY29uZmlnLmxlZ2FjeSA9PT0gdHJ1ZSAmJiB0aGlzLmVsZW1lbnRJc0luVmlldyhlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0ZUVsZW1lbnRzKFtlbGVtZW50XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgYW5pbWF0ZUVsZW1lbnRzKGVsZW1lbnRzLCBvYnNlcnZlcikge1xuICAgICAgICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgdmFyIGVsbSA9IGVsZW1lbnQudGFyZ2V0IHx8IGVsZW1lbnQ7IC8vIEp1c3QgbWFrZSBzdXJlIHdoaWNoIGVsZW1lbnQgd2lsbCBiZSB1c2VkXG4gICAgICAgICAgICB2YXIgZWxlbWVudENvbmZpZyA9IHRoaXMucGFyc2VDb25maWcoZWxtKTsgLy8gR2V0IGNvbmZpZyB2YWx1ZSBvbiB0aGF0IGVsZW1lbnRcblxuICAgICAgICAgICAgLy8gSWYgZHVyYXRpb24gaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHplcm8sIGp1c3QgZm9ybWF0IHRoZSAnZW5kJyB2YWx1ZVxuICAgICAgICAgICAgaWYgKGVsZW1lbnRDb25maWcuZHVyYXRpb24gPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbG0uaW5uZXJIVE1MID0gdGhpcy5mb3JtYXROdW1iZXIoZWxlbWVudENvbmZpZy5lbmQsIGVsZW1lbnRDb25maWcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoKCFvYnNlcnZlciAmJiAhdGhpcy5lbGVtZW50SXNJblZpZXcoZWxlbWVudCkpIHx8IChvYnNlcnZlciAmJiBlbGVtZW50LmludGVyc2VjdGlvblJhdGlvIDwgMC41KSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGVsZW1lbnRDb25maWcuc3RhcnQgPiBlbGVtZW50Q29uZmlnLmVuZCA/IGVsZW1lbnRDb25maWcuZW5kIDogZWxlbWVudENvbmZpZy5zdGFydDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxtLmlubmVySFRNTCA9IHRoaXMuZm9ybWF0TnVtYmVyKHZhbHVlLCBlbGVtZW50Q29uZmlnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgZHVyYXRpb24gaXMgbW9yZSB0aGFuIDAsIHRoZW4gc3RhcnQgdGhlIGNvdW50ZXJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXJ0Q291bnRlcihlbG0sIGVsZW1lbnRDb25maWcpO1xuICAgICAgICAgICAgfSwgZWxlbWVudENvbmZpZy5kZWxheSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXJ0Q291bnRlcihlbGVtZW50LCBjb25maWcpIHtcbiAgICAgICAgLy8gRmlyc3QsIGdldCB0aGUgaW5jcmVtZW50cyBzdGVwXG4gICAgICAgIHZhciBpbmNyZW1lbnRzUGVyU3RlcCA9IChjb25maWcuZW5kIC0gY29uZmlnLnN0YXJ0KSAvIChjb25maWcuZHVyYXRpb24gLyBjb25maWcuZGVsYXkpO1xuICAgICAgICAvLyBOZXh0LCBzZXQgdGhlIGNvdW50ZXIgbW9kZSAoSW5jcmVtZW50IG9yIERlY3JlbWVudClcbiAgICAgICAgdmFyIGNvdW50TW9kZSA9ICdpbmMnO1xuXG4gICAgICAgIC8vIFNldCBtb2RlIHRvICdkZWNyZW1lbnQnIGFuZCAnaW5jcmVtZW50IHN0ZXAnIHRvIG1pbnVzIGlmIHN0YXJ0IGlzIGxhcmdlciB0aGFuIGVuZFxuICAgICAgICBpZiAoY29uZmlnLnN0YXJ0ID4gY29uZmlnLmVuZCkge1xuICAgICAgICAgICAgY291bnRNb2RlID0gJ2RlYyc7XG4gICAgICAgICAgICBpbmNyZW1lbnRzUGVyU3RlcCAqPSAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5leHQsIGRldGVybWluZSB0aGUgc3RhcnRpbmcgdmFsdWVcbiAgICAgICAgdmFyIGN1cnJlbnRDb3VudCA9IHRoaXMucGFyc2VWYWx1ZShjb25maWcuc3RhcnQpO1xuICAgICAgICAvLyBBbmQgdGhlbiBwcmludCBpdCdzIHZhbHVlIHRvIHRoZSBwYWdlXG4gICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5mb3JtYXROdW1iZXIoY3VycmVudENvdW50LCBjb25maWcpO1xuXG4gICAgICAgIC8vIElmIHRoZSBjb25maWcgJ29uY2UnIGlzIHRydWUsIHRoZW4gc2V0IHRoZSAnZHVyYXRpb24nIHRvIDBcbiAgICAgICAgaWYoY29uZmlnLm9uY2UgPT09IHRydWUpe1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcHVyZWNvdW50ZXItZHVyYXRpb24nLCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vdywgc3RhcnQgY291bnRpbmcgd2l0aCBjb3VudGVyV29ya2VyIHVzaW5nIEludGVydmFsIG1ldGhvZCBiYXNlZCBvbiBkZWxheVxuICAgICAgICB2YXIgY291bnRlcldvcmtlciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIC8vIEZpcnN0LCBkZXRlcm1pbmUgdGhlIG5leHQgdmFsdWUgYmFzZSBvbiBjdXJyZW50IHZhbHVlLCBpbmNyZW1lbnQgdmFsdWUsIGFuZCBjb3VuZCBtb2RlXG4gICAgICAgICAgICB2YXIgbmV4dE51bSA9IHRoaXMubmV4dE51bWJlcihjdXJyZW50Q291bnQsIGluY3JlbWVudHNQZXJTdGVwLCBjb3VudE1vZGUpO1xuICAgICAgICAgICAgLy8gTmV4dCwgcHJpbnQgdGhhdCB2YWx1ZSB0byB0aGUgcGFnZVxuICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLmZvcm1hdE51bWJlcihuZXh0TnVtLCBjb25maWcpO1xuICAgICAgICAgICAgLy8gTm93IHNldCB0aGF0IHZhbHVlIHRvIHRoZSBjdXJyZW50IHZhbHVlLCBiZWNvdXNlIGl0J3MgYWxyZWFkeSBwcmludGVkXG4gICAgICAgICAgICBjdXJyZW50Q291bnQgPSBuZXh0TnVtO1xuXG4gICAgICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgbGFyZ2VyIG9yIGxlc3MgdGhhbiB0aGUgJ2VuZCcgKGJhc2Ugb24gbW9kZSksIHRoZW4gIHByaW50IHRoZSBlbmQgdmFsdWUgYW5kIHN0b3AgdGhlIEludGVydmFsXG4gICAgICAgICAgICBpZiAoKGN1cnJlbnRDb3VudCA+PSBjb25maWcuZW5kICYmIGNvdW50TW9kZSA9PSAnaW5jJykgfHwgKGN1cnJlbnRDb3VudCA8PSBjb25maWcuZW5kICYmIGNvdW50TW9kZSA9PSAnZGVjJykpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHRoaXMuZm9ybWF0TnVtYmVyKGNvbmZpZy5lbmQsIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjb3VudGVyV29ya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgY29uZmlnLmRlbGF5KTtcbiAgICB9XG5cbiAgICBwYXJzZUNvbmZpZyhlbGVtZW50KSB7XG5cbiAgICAgICAgLy8gRmlyc3QsIHdlIG5lZWQgdG8gZGVjbGFyZSB0aGUgYmFzZSBDb25maWdcbiAgICAgICAgLy8gVGhpcyBjb25maWcgd2lsbCBiZSB1c2VkIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBjb25maWdcbiAgICAgICAgdmFyIGJhc2VDb25maWcgPSB7Li4udGhpcy5jb25maWdPcHRpb25zfTtcblxuICAgICAgICAvLyBOZXh0LCBnZXR0IGFsbCAnZGF0YS1wcmVjb3VudGVyJyBhdHRyaWJ1dGVzIHZhbHVlLiBTdG9yZSB0byBhcnJheVxuICAgICAgICB2YXIgY29uZmlnVmFsdWVzID0gW10uZmlsdGVyLmNhbGwoZWxlbWVudC5hdHRyaWJ1dGVzLCBmdW5jdGlvbihhdHRyKSB7XG4gICAgICAgICAgICByZXR1cm4gL15kYXRhLXB1cmVjb3VudGVyLS8udGVzdChhdHRyLm5hbWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBOb3csIHdlIGNyZWF0ZSBlbGVtZW50IGNvbmZpZyBhcyBhbiBlbXB0eSBvYmplY3RcbiAgICAgICAgdmFyIGVsZW1lbnRDb25maWcgPSB7fTtcblxuICAgICAgICAvLyBBbmQgdGhlbiwgZmlsbCB0aGUgZWxlbWVudCBjb25maWcgYmFzZWQgb24gY29uZmlnIHZhbHVlc1xuICAgICAgICBjb25maWdWYWx1ZXMuZm9yRWFjaChlID0+IHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gZS5uYW1lLnJlcGxhY2UoJ2RhdGEtcHVyZWNvdW50ZXItJywgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBuYW1lID09ICdkdXJhdGlvbicgPyBwYXJzZUludCh0aGlzLnBhcnNlVmFsdWUoZS52YWx1ZSkgKiAxMDAwKSA6IHRoaXMucGFyc2VWYWx1ZShlLnZhbHVlKTtcbiAgICAgICAgICAgIGVsZW1lbnRDb25maWdbbmFtZV0gPSB2YWx1ZTsgLy8gV2Ugd2lsbCBnZXQgYW4gb2JqZWN0XG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gTGFzdCBtYXJnZSBiYXNlIGNvbmZpZyB3aXRoIGVsZW1lbnQgY29uZmlnIGFuZCByZXR1cm4gaXQgYXMgYW4gb2JqZWN0XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGJhc2VDb25maWcsIGVsZW1lbnRDb25maWcpO1xuXG4gICAgfVxuXG4gICAgLyoqIFRoaXMgZnVuY3Rpb24gaXMgdG8gZ2V0IHRoZSBuZXh0IG51bWJlciAqL1xuICAgIG5leHROdW1iZXIobnVtYmVyLCBzdGVwcywgbW9kZSA9ICdpbmMnKSB7XG4gICAgICAgIC8vIEZpcnN0LCBnZXQgdGhlIGV4YWN0IHZhbHVlIGZyb20gdGhlIG51bWJlciBhbmQgc3RlcCAoaW50IG9yIGZsb2F0KVxuICAgICAgICBudW1iZXIgPSB0aGlzLnBhcnNlVmFsdWUobnVtYmVyKTtcbiAgICAgICAgc3RlcHMgPSB0aGlzLnBhcnNlVmFsdWUoc3RlcHMpO1xuXG4gICAgICAgIC8vIExhc3QsIGdldCB0aGUgbmV4dCBudW1iZXIgYmFzZWQgb24gY3VycmVudCBudW1iZXIsIGluY3JlbWVudCBzdGVwLCBhbmQgY291bnQgbW9kZVxuICAgICAgICAvLyBBbHdheXMgcmV0dXJuIGl0IGFzIGZsb2F0XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KG1vZGUgPT09ICdpbmMnID8gKG51bWJlciArIHN0ZXBzKSA6IChudW1iZXIgLSBzdGVwcykpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIGZ1bmN0aW9uIGlzIHRvIGNvbnZlcnQgbnVtYmVyIGludG8gY3VycmVuY3kgZm9ybWF0ICovXG4gICAgY29udmVydFRvQ3VycmVuY3lTeXN0ZW0gKG51bWJlciwgY29uZmlnKSB7XG4gICAgICAgIHZhciBzeW1ib2wgPSBjb25maWcuY3VycmVuY3lzeW1ib2wgfHwgXCJcIiwgLy8gU2V0IHRoZSBDdXJyZW5jeSBTeW1ib2wgKGlmIGFueSlcbiAgICAgICAgICAgIGxpbWl0ID0gY29uZmlnLmRlY2ltYWxzIHx8IDEsICAvLyBTZXQgdGhlIGRlY2ltYWwgbGltaXQgKGRlZmF1bHQgaXMgMSlcbiAgICAgICAgICAgIG51bWJlciA9IE1hdGguYWJzKE51bWJlcihudW1iZXIpKTsgLy8gR2V0IHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBudW1iZXJcblxuICAgICAgICAvLyBTZXQgdGhlIHZhbHVlXG4gICAgICAgIHZhciB2YWx1ZSA9IG51bWJlciA+PSAxLjBlKzEyID8gYCR7KG51bWJlciAvIDEuMGUrMTIpLnRvRml4ZWQobGltaXQpfSBUYCAvLyBUd2VsdmUgemVyb3MgZm9yIFRyaWxsaW9uc1xuICAgICAgICAgICAgOiBudW1iZXIgPj0gMS4wZSs5ID8gYCR7KG51bWJlciAvIDEuMGUrOSkudG9GaXhlZChsaW1pdCl9IEJgIC8vIE5pbmUgemVyb3MgZm9yIEJpbGxpb25zXG4gICAgICAgICAgICAgICAgOiBudW1iZXIgPj0gMS4wZSs2ID8gYCR7KG51bWJlciAvIDEuMGUrNikudG9GaXhlZChsaW1pdCl9IE1gICAvLyBTaXggemVyb3MgZm9yIE1pbGxpb25zXG4gICAgICAgICAgICAgICAgICAgIDogbnVtYmVyID49IDEuMGUrMyA/IGAkeyhudW1iZXIgLyAxLjBlKzEyKS50b0ZpeGVkKGxpbWl0KX0gS2AgLy8gVGhyZWUgemVyb3MgZm9yIFRoYXVzYW5kc1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBudW1iZXIudG9GaXhlZChsaW1pdCk7IC8vIElmIGxlc3MgdGhhbiAxMDAwLCBwcmludCBpdCdzIHZhbHVlXG5cbiAgICAgICAgLy8gQXBwbHkgc3ltYm9sIGJlZm9yZSB0aGUgdmFsdWUgYW5kIHJldHVybiBpdCBhcyBzdHJpbmdcbiAgICAgICAgcmV0dXJuIHN5bWJvbCArIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIGZ1bmN0aW9uIGlzIHRvIGdldCB0aGUgbGFzdCBmb3JtYXRlZCBudW1iZXIgKi9cbiAgICBhcHBseVNlcGFyYXRvcih2YWx1ZSwgY29uZmlnKXtcbiAgICAgICAgLy8gSWYgY29uZmlnIHNlcGFyYXRvciBpcyBmYWxzZSwgZGVsZXRlIGFsbCBzZXBhcmF0b3JcbiAgICAgICAgaWYgKCFjb25maWcuc2VwYXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKC8sL2dpLCAnZ2knKSwgJycpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBjb25maWcgc2VwYXJhdG9yIGlzIHRydWUsIHRoZW4gY3JlYXRlIHNlcGFyYXRvclxuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvKFxcZCkoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCBcIiQxLFwiKVxuICAgICAgICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cCgvLC9naSwgJ2dpJyksIGNvbmZpZy5zZXBhcmF0b3JzeW1ib2wpXG4gICAgfVxuXG4gICAgLyoqIFRoaXMgZnVuY3Rpb24gaXMgdG8gZ2V0IGZvcm1hdGVkIG51bWJlciB0byBiZSBwcmludGVkIGluIHRoZSBwYWdlICovXG4gICAgZm9ybWF0TnVtYmVyKG51bWJlciwgY29uZmlnKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yICd0b0xvY2FsZVN0cmluZycgbWV0aG9kXG4gICAgICAgIHZhciBzdHJDb25maWcgPSB7bWluaW11bUZyYWN0aW9uRGlnaXRzOiBjb25maWcuZGVjaW1hbHMsIG1heGltdW1GcmFjdGlvbkRpZ2l0czogY29uZmlnLmRlY2ltYWxzfTtcbiAgICAgICAgLy8gU2V0IHRoZSBudW1iZXIgaWYgaXQgdXNpbmcgY3VycmVuY3ksIHRoZW4gY29udmVydC4gSWYgZG9lc24ndCwganVzdCBwYXJzZSBpdCBhcyBmbG9hdFxuICAgICAgICBudW1iZXIgPSBjb25maWcuY3VycmVuY3kgPyB0aGlzLmNvbnZlcnRUb0N1cnJlbmN5U3lzdGVtKG51bWJlciwgY29uZmlnKSA6IHBhcnNlRmxvYXQobnVtYmVyKTtcblxuICAgICAgICAvLyBMYXN0LCBhcHBseSB0aGUgbnVtYmVyIHNlcGFyYXRvciB1c2luZyBudW1iZXIgYXMgc3RyaW5nXG4gICAgICAgIHJldHVybiB0aGlzLmFwcGx5U2VwYXJhdG9yKG51bWJlci50b0xvY2FsZVN0cmluZyh1bmRlZmluZWQsIHN0ckNvbmZpZyksIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgZnVuY3Rpb24gaXMgdG8gZ2V0IHRoZSBwYXJzZWQgdmFsdWUgKi9cbiAgICBwYXJzZVZhbHVlKGRhdGEpIHtcbiAgICAgICAgLy8gSWYgbnVtYmVyIHdpdGggZG90ICguKSwgd2lsbCBiZSBwYXJzZWQgYXMgZmxvYXRcbiAgICAgICAgaWYgKC9eWzAtOV0rXFwuWzAtOV0rJC8udGVzdChkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYganVzdCBudW1iZXIsIHdpbGwgYmUgcGFyc2VkIGFzIGludGVnZXJcbiAgICAgICAgaWYgKC9eWzAtOV0rJC8udGVzdChkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGl0J3MgYm9vbGVhbiBzdHJpbmcsIHdpbGwgYmUgcGFyc2VkIGFzIGJvb2xlYW5cbiAgICAgICAgaWYgKC9edHJ1ZXxmYWxzZS9pLnRlc3QoZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiAvXnRydWUvaS50ZXN0KGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJldHVybiBpdCdzIHZhbHVlIGFzIGRlZmF1bHRcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgZnVuY3Rpb24gaXMgdG8gZGV0ZWN0IHRoZSBlbGVtZW50IGlzIGluIHZpZXcgb3Igbm90LiAqL1xuICAgIGVsZW1lbnRJc0luVmlldyhlbGVtZW50KSB7XG4gICAgICAgIHZhciB0b3AgPSBlbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgdmFyIGxlZnQgPSBlbGVtZW50Lm9mZnNldExlZnQ7XG4gICAgICAgIHZhciB3aWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgIHZhciBoZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcblxuICAgICAgICB3aGlsZSAoZWxlbWVudC5vZmZzZXRQYXJlbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDtcbiAgICAgICAgICAgIHRvcCArPSBlbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgICAgIGxlZnQgKz0gZWxlbWVudC5vZmZzZXRMZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRvcCA+PSB3aW5kb3cucGFnZVlPZmZzZXQgJiZcbiAgICAgICAgICAgIGxlZnQgPj0gd2luZG93LnBhZ2VYT2Zmc2V0ICYmXG4gICAgICAgICAgICAodG9wICsgaGVpZ2h0KSA8PSAod2luZG93LnBhZ2VZT2Zmc2V0ICsgd2luZG93LmlubmVySGVpZ2h0KSAmJlxuICAgICAgICAgICAgKGxlZnQgKyB3aWR0aCkgPD0gKHdpbmRvdy5wYWdlWE9mZnNldCArIHdpbmRvdy5pbm5lcldpZHRoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBKdXN0IHNvbWUgY29uZGl0aW9uIHRvIGNoZWNrIGJyb3dzZXIgSW50ZXJzZWN0aW9uIFN1cHBvcnQgKi9cbiAgICBpbnRlcnNlY3Rpb25MaXN0ZW5lclN1cHBvcnRlZCgpIHtcbiAgICAgICAgcmV0dXJuICgnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInIGluIHdpbmRvdykgJiZcbiAgICAgICAgICAgICgnSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeScgaW4gd2luZG93KSAmJlxuICAgICAgICAgICAgKCdpbnRlcnNlY3Rpb25SYXRpbycgaW4gd2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyRW50cnkucHJvdG90eXBlKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGRlZmF1bHQgUHVyZUNvdW50ZXI7IiwiaW1wb3J0IHsgdV9leHRlbmRPYmplY3QgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdV9vYmplY3RfZXh0ZW5kXCI7XG5cbmNsYXNzIERTTVBNZWRpYUNvbnRyb2xzIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdHMgPSB7XG4gICAgICAgICAgICBzZWxlY3RvcjogJy5qcy12aWRlby1pbml0JyxcbiAgICAgICAgICAgIHdyYXBwZXI6ICdqcy12aWRlby13cmFwJyxcbiAgICAgICAgICAgIG92ZXJsYXk6ICcuanMtdmlkZW8tb3ZlcmxheScsXG4gICAgICAgICAgICBidXR0b25zOiB7XG4gICAgICAgICAgICAgICAgcGxheTogJy5idG4tcGxheScsXG4gICAgICAgICAgICAgICAgbXV0ZTogJy5idG4tbXV0ZScsXG4gICAgICAgICAgICAgICAgY2xvc2U6ICcuYnRuLWNsb3NlJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsYXNzZXM6IHtcbiAgICAgICAgICAgICAgICBwYXVzZTogJ2lzLXBhdXNlJyxcbiAgICAgICAgICAgICAgICBwbGF5aW5nOiAnaXMtcGxheWluZycsXG4gICAgICAgICAgICAgICAgc291bmQ6ICdpcy1zb3VuZCcsXG4gICAgICAgICAgICAgICAgbXV0ZTogJ2lzLW11dGVkJyxcbiAgICAgICAgICAgICAgICBwYXJlbnRQbGF5OiAnaXMtdmlkZW8tcGxheWluZycsXG4gICAgICAgICAgICAgICAgcGFyZW50UGF1c2U6ICdpcy12aWRlby1wYXVzZWQnLFxuICAgICAgICAgICAgICAgIHRyaWdnZXJBdXRvcGxheTogJ2pzLXRyaWdnZXItYXV0b3BsYXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udHJvbHM6IGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZyA9IHVfZXh0ZW5kT2JqZWN0KHRoaXMuZGVmYXVsdHMsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLml0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5zZWxlY3Rvcik7XG5cbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgaW5pdCgpIHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIHNlbGYuYmluZFRvZ2dsZVBsYXkgPSB0aGlzLnRvZ2dsZVBsYXkuYmluZCh0aGlzKTtcbiAgICAgICAgc2VsZi5iaW5kVG9nZ2xlTXV0ZSA9IHRoaXMudG9nZ2xlTXV0ZS5iaW5kKHRoaXMpO1xuICAgICAgICBzZWxmLmJpbmRFbmRlZFZpZGVvID0gdGhpcy5lbmRlZFZpZGVvLmJpbmQodGhpcyk7XG5cbiAgICAgICAgWy4uLnNlbGYuaXRlbXNdLmZvckVhY2goKHZpZGVvKSA9PiB7XG5cbiAgICAgICAgICAgIGlmICghc2VsZi5jb25maWcuY29udHJvbHMpIHtcbiAgICAgICAgICAgICAgICB2aWRlby5jb250cm9scyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgdmlkZW9Db250YWluZXIgPSB2aWRlby5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgdmlkZW9Db250YWluZXIuY2xhc3NMaXN0LmFkZChzZWxmLmNvbmZpZy53cmFwcGVyKTtcbiAgICAgICAgICAgIGxldCBidG5QbGF5ID0gdmlkZW9Db250YWluZXIucXVlcnlTZWxlY3RvcihzZWxmLmNvbmZpZy5idXR0b25zLnBsYXkpO1xuICAgICAgICAgICAgbGV0IGJ0bk11dGUgPSB2aWRlb0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKHNlbGYuY29uZmlnLmJ1dHRvbnMubXV0ZSk7XG5cbiAgICAgICAgICAgIC8vIGJpbmQgZXZlbnRzIHRvIGJ1dHRvbnNcblxuICAgICAgICAgICAgaWYgKGJ0blBsYXkpIHtcbiAgICAgICAgICAgICAgICBidG5QbGF5LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2VsZi5iaW5kVG9nZ2xlUGxheSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChidG5NdXRlKSB7XG4gICAgICAgICAgICAgICAgYnRuTXV0ZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHNlbGYuYmluZFRvZ2dsZU11dGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIGV2ZW50IHRvIHZpZGVvIGl0c2VsZlxuICAgICAgICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignZW5kZWQnLCBzZWxmLmJpbmRFbmRlZFZpZGVvLCBmYWxzZSk7XG5cbiAgICAgICAgICAgIGlmICh2aWRlby5jbGFzc0xpc3QuY29udGFpbnMoc2VsZi5jb25maWcuY2xhc3Nlcy50cmlnZ2VyQXV0b3BsYXkpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5zdGFydFBsYXkodmlkZW8pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGVuZGVkVmlkZW8oZXYpIHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgdmlkZW8gPSBldi5jdXJyZW50VGFyZ2V0O1xuICAgICAgICBsZXQgcGFyZW50V3JhcCA9IHZpZGVvLmNsb3Nlc3QoJy4nICsgc2VsZi5jb25maWcud3JhcHBlcik7XG4gICAgICAgIGxldCBidG5QbGF5ID0gcGFyZW50V3JhcC5xdWVyeVNlbGVjdG9yKHNlbGYuY29uZmlnLmJ1dHRvbnMucGxheSk7XG4gICAgICAgIGxldCB2aWRlT3ZlcmxheSA9IHBhcmVudFdyYXAucXVlcnlTZWxlY3RvcihzZWxmLmNvbmZpZy5vdmVybGF5KTtcblxuICAgICAgICB2aWRlby5wYXVzZSgpO1xuICAgICAgICB2aWRlby5jdXJyZW50VGltZSA9IDA7XG4gICAgICAgIGJ0blBsYXkuY2xhc3NMaXN0LmFkZChzZWxmLmNvbmZpZy5jbGFzc2VzLnBhdXNlKTtcbiAgICAgICAgYnRuUGxheS5jbGFzc0xpc3QucmVtb3ZlKHNlbGYuY29uZmlnLmNsYXNzZXMucGxheWluZyk7XG4gICAgICAgIHBhcmVudFdyYXAuY2xhc3NMaXN0LnJlbW92ZShzZWxmLmNvbmZpZy5jbGFzc2VzLnBhcmVudFBsYXkpO1xuXG4gICAgICAgIGlmICh2aWRlT3ZlcmxheSkge1xuICAgICAgICAgICAgdmlkZU92ZXJsYXkuY2xhc3NMaXN0LmFkZChzZWxmLmNvbmZpZy5jbGFzc2VzLnBhdXNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRvZ2dsZVBsYXkoZXYpIHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgZWxlbSA9IGV2LmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgIGxldCBwYXJlbnRXcmFwID0gZWxlbS5jbG9zZXN0KCcuJyArIHNlbGYuY29uZmlnLndyYXBwZXIpO1xuICAgICAgICBsZXQgdmlkZW8gPSBwYXJlbnRXcmFwLnF1ZXJ5U2VsZWN0b3Ioc2VsZi5jb25maWcuc2VsZWN0b3IpO1xuICAgICAgICBsZXQgdmlkZU92ZXJsYXkgPSBwYXJlbnRXcmFwLnF1ZXJ5U2VsZWN0b3Ioc2VsZi5jb25maWcub3ZlcmxheSk7XG5cbiAgICAgICAgaWYgKHZpZGVvLnBhdXNlZCB8fCB2aWRlby5lbmRlZCkge1xuICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QuYWRkKHNlbGYuY29uZmlnLmNsYXNzZXMucGxheWluZyk7XG4gICAgICAgICAgICBwYXJlbnRXcmFwLmNsYXNzTGlzdC5hZGQoc2VsZi5jb25maWcuY2xhc3Nlcy5wYXJlbnRQbGF5KTtcbiAgICAgICAgICAgIHBhcmVudFdyYXAuY2xhc3NMaXN0LnJlbW92ZShzZWxmLmNvbmZpZy5jbGFzc2VzLnBhcmVudFBhdXNlKTtcbiAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LnJlbW92ZShzZWxmLmNvbmZpZy5jbGFzc2VzLnBhdXNlKTtcbiAgICAgICAgICAgIHZpZGVvLnBsYXkoKTtcblxuICAgICAgICAgICAgaWYgKHZpZGVPdmVybGF5KSB7XG4gICAgICAgICAgICAgICAgdmlkZU92ZXJsYXkuY2xhc3NMaXN0LnJlbW92ZShzZWxmLmNvbmZpZy5jbGFzc2VzLnBhdXNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZChzZWxmLmNvbmZpZy5jbGFzc2VzLnBhdXNlKTtcbiAgICAgICAgICAgIHBhcmVudFdyYXAuY2xhc3NMaXN0LmFkZChzZWxmLmNvbmZpZy5jbGFzc2VzLnBhcmVudFBhdXNlKTtcbiAgICAgICAgICAgIHBhcmVudFdyYXAuY2xhc3NMaXN0LnJlbW92ZShzZWxmLmNvbmZpZy5jbGFzc2VzLnBhcmVudFBsYXkpO1xuICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKHNlbGYuY29uZmlnLmNsYXNzZXMucGxheWluZyk7XG4gICAgICAgICAgICB2aWRlby5wYXVzZSgpO1xuXG4gICAgICAgICAgICBpZiAodmlkZU92ZXJsYXkpIHtcbiAgICAgICAgICAgICAgICB2aWRlT3ZlcmxheS5jbGFzc0xpc3QuYWRkKHNlbGYuY29uZmlnLmNsYXNzZXMucGF1c2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG9nZ2xlTXV0ZShldikge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBlbGVtID0gZXYuY3VycmVudFRhcmdldDtcbiAgICAgICAgbGV0IHBhcmVudFdyYXAgPSBlbGVtLmNsb3Nlc3QoJy4nICsgc2VsZi5jb25maWcud3JhcHBlcik7XG4gICAgICAgIGxldCB2aWRlbyA9IHBhcmVudFdyYXAucXVlcnlTZWxlY3RvcihzZWxmLmNvbmZpZy5zZWxlY3Rvcik7XG5cbiAgICAgICAgdmlkZW8ubXV0ZWQgPSAhdmlkZW8ubXV0ZWQ7XG4gICAgICAgIGlmICh2aWRlby5tdXRlZCkge1xuICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QuYWRkKHNlbGYuY29uZmlnLmNsYXNzZXMubXV0ZSk7XG4gICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5yZW1vdmUoc2VsZi5jb25maWcuY2xhc3Nlcy5zb3VuZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoc2VsZi5jb25maWcuY2xhc3Nlcy5zb3VuZCk7XG4gICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5yZW1vdmUoc2VsZi5jb25maWcuY2xhc3Nlcy5tdXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0b3BQbGF5KGVsZW0pIHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgdmlkZW8gPSBlbGVtO1xuICAgICAgICBsZXQgdmlkZW9Db250YWluZXIgPSB2aWRlby5wYXJlbnRFbGVtZW50O1xuICAgICAgICBsZXQgYnRuUGxheSA9IHZpZGVvQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3Ioc2VsZi5jb25maWcuYnV0dG9ucy5wbGF5KTtcblxuICAgICAgICBpZiAoIXZpZGVvLnBhdXNlZCB8fCAhdmlkZW8uZW5kZWQpIHtcbiAgICAgICAgICAgIGJ0blBsYXkuY2xhc3NMaXN0LmFkZChzZWxmLmNvbmZpZy5jbGFzc2VzLnBhdXNlKTtcbiAgICAgICAgICAgIC8vIHZUYWcucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpcy12aWRlby1wYXVzZWQnKTtcbiAgICAgICAgICAgIGJ0blBsYXkuY2xhc3NMaXN0LnJlbW92ZShzZWxmLmNvbmZpZy5jbGFzc2VzLnBsYXlpbmcpO1xuICAgICAgICAgICAgdmlkZW8ucGF1c2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXJ0UGxheShlbGVtKSB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IHZpZGVvID0gZWxlbTtcbiAgICAgICAgbGV0IHZpZGVvQ29udGFpbmVyID0gdmlkZW8ucGFyZW50RWxlbWVudDtcbiAgICAgICAgbGV0IGJ0blBsYXkgPSB2aWRlb0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKHNlbGYuY29uZmlnLmJ1dHRvbnMucGxheSk7XG5cbiAgICAgICAgaWYgKHZpZGVvLnBhdXNlZCB8fCB2aWRlby5lbmRlZCkge1xuICAgICAgICAgICAgYnRuUGxheS5jbGFzc0xpc3QuYWRkKHNlbGYuY29uZmlnLmNsYXNzZXMucGxheWluZyk7XG4gICAgICAgICAgICAvKnZUYWcucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpcy12aWRlby1wbGF5aW5nJyk7XG4gICAgICAgICAgICB2VGFnLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaXMtdmlkZW8tcGF1c2VkJyk7Ki9cbiAgICAgICAgICAgIGJ0blBsYXkuY2xhc3NMaXN0LnJlbW92ZShzZWxmLmNvbmZpZy5jbGFzc2VzLnBhdXNlKTtcbiAgICAgICAgICAgIHZpZGVvLnBsYXkoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRFNNUE1lZGlhQ29udHJvbHM7IiwiaW1wb3J0IHsgaXNBdXRvUGxheU9uIH0gZnJvbSBcIi4vc2xpZGVyLW9wdGlvbnMvYXV0b3BsYXlcIjtcbmltcG9ydCB7IGlzTGF6eUxvYWRPbiB9IGZyb20gXCIuL3NsaWRlci1vcHRpb25zL2xhenlcIjtcbmltcG9ydCBTd2lwZXJXaXRoVGFicyBmcm9tIFwiLi9zd2lwZXItd2l0aC10YWJzXCI7XG5pbXBvcnQgeyB1X3Rocm90dGxlZCB9IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHtpc05hdmlnYXRpb25Pbn0gZnJvbSBcIi4vc2xpZGVyLW9wdGlvbnMvbmF2aWdhdGlvblwiO1xuaW1wb3J0IHt1X3BhcnNlQm9vbH0gZnJvbSBcIi4uLy4uL3V0aWxzL3VfdHlwZXNcIjtcbmltcG9ydCB7aXNMb29wT259IGZyb20gXCIuL3NsaWRlci1vcHRpb25zL2xvb3BcIjtcbmltcG9ydCB7aXNFZmZlY3RPbn0gZnJvbSBcIi4vc2xpZGVyLW9wdGlvbnMvZWZmZWN0c1wiO1xuXG5jbGFzcyBEU01QU2xpZGVyRFNCTFMge1xuICAgIGNvbnN0cnVjdG9yKHNsaWRlcklEKSB7XG4gICAgICAgIHRoaXMub3B0aW9uc0Rlc2t0b3AgPSB7XG4gICAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wdGlvbnNNb2JpbGUgPSB7XG4gICAgICAgICAgICBzbGlkZUNsYXNzOiAnanMtZHNibHMtbmF2LWl0ZW0nLFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAgIGVsOiAnLmwtc2xpZGVyLW5hdl9fcGFnaW5hdGlvbicsXG4gICAgICAgICAgICAgICAgY2xpY2thYmxlOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wdGlvbnNOYXYgPSB7XG4gICAgICAgICAgICBpdGVtOiAgICAgICAnLmpzLWRzYmxzLW5hdi1pdGVtJyxcbiAgICAgICAgICAgIGFjdGl2ZTogICAgICdpcy1hY3RpdmUnLFxuICAgICAgICAgICAgdHJpZ2dlcjogICAgJ21vdXNlb3ZlcidcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2xpZGVyTm8gPSBzbGlkZXJJRC5yZXBsYWNlKCdqcy1zbGlkZXItZHNibHMtJywnJyk7XG4gICAgICAgIHRoaXMuc2xpZGVyTmFtZSA9IHNsaWRlcklEO1xuICAgICAgICB0aGlzLnNsaWRlck1vYmlsZU5hbWUgPSBzbGlkZXJJRC5yZXBsYWNlKCdqcy1zbGlkZXItZHNibHMtJywnanMtc2xpZGVyLWRzYmxzLW0tJyk7XG5cbiAgICAgICAgdGhpcy5zbGlkZXJTZWwgPSAnIycgKyB0aGlzLnNsaWRlck5hbWU7XG4gICAgICAgIHRoaXMuc2xpZGVyTW9iaWxlU2VsID0gJyMnICsgdGhpcy5zbGlkZXJNb2JpbGVOYW1lO1xuICAgICAgICB0aGlzLm9wdGlvbnNOYXYuZWxlbWVudCA9IHRoaXMuc2xpZGVyTW9iaWxlU2VsO1xuXG4gICAgICAgIHRoaXMuc2xpZGVyRWxlbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5zbGlkZXJTZWwpO1xuICAgICAgICB0aGlzLnNsaWRlck1vYmlsZUVsZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuc2xpZGVyTW9iaWxlU2VsKTtcblxuICAgICAgICB0aGlzLnNob3dNb2JpbGUgPSB1X3BhcnNlQm9vbCh0aGlzLnNsaWRlckVsZW0uZ2V0QXR0cmlidXRlKCdkYXRhLXNsaWRlci1pcy1tb2JpbGUnKSk7XG5cbiAgICAgICAgdGhpcy5pc01vYmlsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzRGVza3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuZGVza3RvcEluc3RhbmNlO1xuICAgICAgICB0aGlzLm1vYmlsZUluc3RhbmNlO1xuICAgICAgICB0aGlzLmRlc2t0b3BUYWJzO1xuXG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cblxuICAgIGluaXQoKSB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IGN1cnJlbnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuXG4gICAgICAgIGN1cnJlbnRXaWR0aCA8IDEwMjUgPyBzZWxmLmlzTW9iaWxlID0gdHJ1ZSA6IHNlbGYuaXNEZXNrdG9wID0gdHJ1ZTtcblxuICAgICAgICBzZWxmLnBhcnNlT3B0aW9ucygpO1xuXG4gICAgICAgIGlmKHNlbGYuaXNNb2JpbGUgJiYgc2VsZi5zaG93TW9iaWxlKSBzZWxmLmNyZWF0ZU1vYmlsZSgpO1xuICAgICAgICBpZihzZWxmLmlzRGVza3RvcCkgc2VsZi5jcmVhdGVEZXNrdG9wKCk7XG5cbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgICAgICAgIHNlbGYudGhyb3R0bGVSZXNpemUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2VsZi50aHJvdHRsZVJlc2l6ZSA9IHVfdGhyb3R0bGVkKCgpID0+IHtcbiAgICAgICAgICAgIHNlbGYucmVzaXplU2xpZGVyKCk7XG4gICAgICAgIH0sIDM1MCk7XG4gICAgfVxuXG4gICAgcGFyc2VPcHRpb25zKCkge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgaWYoc2VsZi5pc01vYmlsZSAmJiBzZWxmLnNob3dNb2JpbGUpIHtcbiAgICAgICAgICAgIGxldCBiYXNlbmFtZSA9IHNlbGYuc2xpZGVyTW9iaWxlTmFtZTtcbiAgICAgICAgICAgIHNlbGYub3B0aW9uc01vYmlsZSA9IGlzTG9vcE9uKHNlbGYuc2xpZGVyTW9iaWxlRWxlbSwgc2VsZi5vcHRpb25zTW9iaWxlKTtcbiAgICAgICAgICAgIHNlbGYub3B0aW9uc01vYmlsZSA9IGlzQXV0b1BsYXlPbihzZWxmLnNsaWRlck1vYmlsZUVsZW0sIHNlbGYub3B0aW9uc01vYmlsZSk7XG4gICAgICAgICAgICBzZWxmLm9wdGlvbnNNb2JpbGUgPSBpc0xhenlMb2FkT24oc2VsZi5zbGlkZXJNb2JpbGVFbGVtLCBzZWxmLm9wdGlvbnNNb2JpbGUpO1xuXG4gICAgICAgICAgICAvLyAubS1zbGlkZXIgcGFyZW50IGlzIGhhcmRjb2RlZCBpbiBpc05hdmlnYXRpb25PbiBvcHRpb25zXG4gICAgICAgICAgICBzZWxmLm9wdGlvbnNNb2JpbGUgPSBpc05hdmlnYXRpb25PbihzZWxmLnNsaWRlck1vYmlsZUVsZW0sIHNlbGYub3B0aW9uc01vYmlsZSwgYmFzZW5hbWUsIHNlbGYuc2xpZGVyTm8pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoc2VsZi5pc0Rlc2t0b3ApIHtcbiAgICAgICAgICAgIGxldCBiYXNlbmFtZSA9IHNlbGYuc2xpZGVyTmFtZTtcbiAgICAgICAgICAgIHNlbGYub3B0aW9uc0Rlc2t0b3AgPSBpc0xvb3BPbihzZWxmLnNsaWRlckVsZW0sIHNlbGYub3B0aW9uc0Rlc2t0b3ApO1xuICAgICAgICAgICAgc2VsZi5vcHRpb25zRGVza3RvcCA9IGlzQXV0b1BsYXlPbihzZWxmLnNsaWRlckVsZW0sIHNlbGYub3B0aW9uc0Rlc2t0b3ApO1xuICAgICAgICAgICAgc2VsZi5vcHRpb25zRGVza3RvcCA9IGlzTGF6eUxvYWRPbihzZWxmLnNsaWRlckVsZW0sIHNlbGYub3B0aW9uc0Rlc2t0b3ApO1xuICAgICAgICAgICAgc2VsZi5vcHRpb25zRGVza3RvcCA9IGlzRWZmZWN0T24oc2VsZi5zbGlkZXJFbGVtLCBzZWxmLm9wdGlvbnNEZXNrdG9wKTtcblxuICAgICAgICAgICAgLy8gLm0tc2xpZGVyIHBhcmVudCBpcyBoYXJkY29kZWQgaW4gaXNOYXZpZ2F0aW9uT24gb3B0aW9uc1xuICAgICAgICAgICAgc2VsZi5vcHRpb25zRGVza3RvcCA9IGlzTmF2aWdhdGlvbk9uKHNlbGYuc2xpZGVyRWxlbSwgc2VsZi5vcHRpb25zRGVza3RvcCwgYmFzZW5hbWUsIHNlbGYuc2xpZGVyTm8pO1xuXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVEZXNrdG9wKCkge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIHNlbGYuZGVza3RvcEluc3RhbmNlID0gbmV3IFN3aXBlcihzZWxmLnNsaWRlclNlbCwgc2VsZi5vcHRpb25zRGVza3RvcCk7XG4gICAgICAgIGlmKHNlbGYuZGVza3RvcEluc3RhbmNlLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICBzZWxmLmRlc2t0b3BUYWJzID0gbmV3IFN3aXBlcldpdGhUYWJzKHNlbGYuZGVza3RvcEluc3RhbmNlLCBzZWxmLm9wdGlvbnNOYXYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlTW9iaWxlKCkge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIHNlbGYubW9iaWxlSW5zdGFuY2UgPSBuZXcgU3dpcGVyKHNlbGYuc2xpZGVyTW9iaWxlU2VsLCBzZWxmLm9wdGlvbnNNb2JpbGUpO1xuICAgIH1cblxuICAgIHJlc2l6ZVNsaWRlcigpIHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgbmV3V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcblxuICAgICAgICBpZihuZXdXaWR0aCA8IDEwMjUpIHtcbiAgICAgICAgICAgIGlmKCFzZWxmLmlzTW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIHNlbGYuZGVza3RvcEluc3RhbmNlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZGVza3RvcFRhYnMudW5iaW5kVGFicygpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmRlc2t0b3BJbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZGVza3RvcEluc3RhbmNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKHNlbGYuc2hvd01vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZU1vYmlsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxmLmlzRGVza3RvcCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHNlbGYuaXNNb2JpbGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYoIXNlbGYuaXNEZXNrdG9wKSB7XG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIHNlbGYubW9iaWxlSW5zdGFuY2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2VsZi5jcmVhdGVEZXNrdG9wKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5pc01vYmlsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHNlbGYuaXNEZXNrdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRFNNUFNsaWRlckRTQkxTOyIsIi8qKlxuICogQXV0b1BsYXkgU2xpZGVyIE9wdGlvbnNcbiAqL1xuXG5jb25zdCBpc0F1dG9QbGF5T24gPSAoZWxlbSwgb3B0aW9ucykgPT4ge1xuICAgIGlmKCFlbGVtKSByZXR1cm4gb3B0aW9ucztcblxuICAgIGxldCBpc0F1dG9wbGF5ID0gZWxlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2xpZGVyLWF1dG9wbGF5Jyk7XG4gICAgbGV0IGlzQXV0b3BsYXlEZWxheSA9IGVsZW0uZ2V0QXR0cmlidXRlKCdkYXRhLXNsaWRlci1hdXRvcGxheS1kZWxheScpO1xuXG4gICAgaWYoaXNBdXRvcGxheSA9PT0gJ3RydWUnKXtcbiAgICAgICAgb3B0aW9ucy5hdXRvcGxheSA9IHt9XG4gICAgICAgIG9wdGlvbnMuYXV0b3BsYXkuZGlzYWJsZU9uSW50ZXJhY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgb3B0aW9ucy5hdXRvcGxheS5kZWxheSA9IGlzQXV0b3BsYXlEZWxheSA/IHBhcnNlSW50KGlzQXV0b3BsYXlEZWxheSkgOiAzMDAwO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zO1xufVxuXG5cblxuZXhwb3J0IHtcbiAgICBpc0F1dG9QbGF5T25cbn0iLCIvKiBlc2xpbnQtZGlzYWJsZSBsaW5lYnJlYWstc3R5bGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9wcmVmZXItZGVmYXVsdC1leHBvcnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHByZWZlci1jb25zdCAqL1xuLyogZXNsaW50LWRpc2FibGUga2V5d29yZC1zcGFjaW5nICovXG4vKipcbiAqIEJyZWFrIFBvaW50cyBPcHRpb25zXG4gKi9cblxuY29uc3QgaXNCcmVha3BvaW50c09uID0gKGVsZW0sIG9wdGlvbnMpID0+IHtcbiAgaWYoIWVsZW0pIHJldHVybiBvcHRpb25zO1xuXG4gIGxldCBub0NvbHVtbnMgPSBwYXJzZUludChlbGVtLmdldEF0dHJpYnV0ZSgnZGF0YS1zbGlkZXItY29sdW1ucycpKTtcbiAgbGV0IGNvbHVtbnNHYXAgPSBwYXJzZUludChlbGVtLmdldEF0dHJpYnV0ZSgnZGF0YS1zbGlkZXItY29sdW1ucy1nYXAnKSk7XG5cbiAgaWYobm9Db2x1bW5zKSB7XG4gICAgb3B0aW9ucy5zbGlkZXNQZXJWaWV3ID0gbm9Db2x1bW5zO1xuICAgIG9wdGlvbnMuYnJlYWtwb2ludHMgPSB7XG4gICAgICAzMjA6IHtcbiAgICAgICAgc2xpZGVzUGVyVmlldzogbm9Db2x1bW5zID4gMyA/IDEgOiAxLFxuICAgICAgICBzcGFjZUJldHdlZW46IDEwLFxuICAgICAgfSxcblxuICAgICAgNTc2OiB7XG4gICAgICAgIHNsaWRlc1BlclZpZXc6IG5vQ29sdW1ucyA+IDMgPyAyIDogMSxcbiAgICAgICAgc3BhY2VCZXR3ZWVuOiBjb2x1bW5zR2FwID4gMjAgPyAxNSA6IDEwLFxuICAgICAgfSxcblxuICAgICAgMTAyNDoge1xuICAgICAgICBzbGlkZXNQZXJWaWV3OiBub0NvbHVtbnMsXG4gICAgICAgIHNwYWNlQmV0d2VlbjogY29sdW1uc0dhcCA+IDMwID8gMjUgOiAyMCxcbiAgICAgIH0sXG4gICAgICAxNDQwOiB7XG4gICAgICAgIHNsaWRlc1BlclZpZXc6IG5vQ29sdW1ucyxcbiAgICAgICAgc3BhY2VCZXR3ZWVuOiBjb2x1bW5zR2FwIHx8IDIwLFxuICAgICAgfSxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMuYnJlYWtwb2ludHMgPSB7XG4gICAgICAzMjA6IHtcbiAgICAgICAgc2xpZGVzUGVyVmlldzogMSxcbiAgICAgIH0sXG4gICAgICA1NzY6IHtcbiAgICAgICAgc2xpZGVzUGVyVmlldzogMixcbiAgICAgICAgc3BhY2VCZXR3ZWVuOiBjb2x1bW5zR2FwID4gMjAgPyAxNSA6IDEwLFxuICAgICAgfSxcbiAgICAgIDEwMjQ6IHtcbiAgICAgICAgc2xpZGVzUGVyVmlldzogJ2F1dG8nLFxuICAgICAgICBzcGFjZUJldHdlZW46IGNvbHVtbnNHYXAgPiAzMCA/IDI1IDogMjAsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gb3B0aW9ucztcbn07XG5cbmV4cG9ydCB7XG4gIGlzQnJlYWtwb2ludHNPbixcbn07XG4iLCJjb25zdCBpc0VmZmVjdE9uID0gKGVsZW0sIG9wdGlvbnMpID0+IHtcbiAgICBpZiAoIWVsZW0pIHJldHVybiBvcHRpb25zO1xuXG4gICAgY29uc3QgaXNFZmZlY3QgPSBlbGVtLmdldEF0dHJpYnV0ZSgnZGF0YS1zbGlkZXItZWZmZWN0LXRyYW5zaXRpb24nKTtcblxuICAgIG9wdGlvbnMuZWZmZWN0ID0ge307XG4gICAgc3dpdGNoIChpc0VmZmVjdCkge1xuXG4gICAgICAgIGNhc2UgJ2ZhZGUnOlxuICAgICAgICAgICAgb3B0aW9ucy5lZmZlY3QgPSAnZmFkZSc7XG4gICAgICAgICAgICBvcHRpb25zLmZhZGVFZmZlY3QgPSB7fTtcbiAgICAgICAgICAgIG9wdGlvbnMuZmFkZUVmZmVjdC5jcm9zc0ZhZGUgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2N1YmUnOlxuICAgICAgICAgICAgb3B0aW9ucy5lZmZlY3QgPSAnY3ViZSc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY292ZXJmbG93JzpcbiAgICAgICAgICAgIG9wdGlvbnMuZWZmZWN0ID0gJ2NvdmVyZmxvdyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY2FyZHMnOlxuICAgICAgICAgICAgb3B0aW9ucy5lZmZlY3QgPSAnY2FyZHMnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2ZsaXAnOlxuICAgICAgICAgICAgb3B0aW9ucy5lZmZlY3QgPSAnZmxpcCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucztcbn07XG5cbmV4cG9ydCB7XG4gICAgaXNFZmZlY3RPbixcbn07XG4iLCIvKipcbiAqIExhenkgTG9hZCBTbGlkZXIgT3B0aW9uc1xuICpcbiAqIFRPRE86IG1pc3Npbmcgb3B0aW9uIGZvciBkYXRhIG9wdGlvbiwgY3JlYXRlIHByZWxvYWRlciBkaXYgdmlhIGpzLCBhbmQgY2hhbmdlIGltYWdlIHNyYyB0byBkYXRhLXNyYywgcmlnaHQgbm93IGFsbCB0aGlzIGRvbmUgbWFudWFsbHlcbiAqL1xuXG5jb25zdCBpc0xhenlMb2FkT24gPSAoZWxlbSwgb3B0aW9ucykgPT4ge1xuICAgIGlmKCFlbGVtKSByZXR1cm4gb3B0aW9ucztcblxuICAgIC8vbGV0IGlzTGF6eUxvYWQgPSBlbGVtLmdldEF0dHJpYnV0ZSgnZGF0YS1zbGlkZXItbGF6eScpO1xuXG4gICAgb3B0aW9ucy5wcmVsb2FkSW1hZ2VzID0gZmFsc2U7XG4gICAgb3B0aW9ucy5sYXp5ID0ge307XG4gICAgb3B0aW9ucy5sYXp5LmxvYWRQcmV2TmV4dCA9IHRydWU7XG4gICAgb3B0aW9ucy5sb2FkT25UcmFuc2l0aW9uU3RhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmV4cG9ydCB7XG4gICAgaXNMYXp5TG9hZE9uXG59IiwiLyoqXG4gKiBMb29wIFNsaWRlciBPcHRpb25zXG4gKi9cblxuY29uc3QgaXNMb29wT24gPSAoZWxlbSwgb3B0aW9ucykgPT4ge1xuICAgIGlmKCFlbGVtKSByZXR1cm4gb3B0aW9ucztcblxuICAgIGxldCBpc0xvb3AgPSBlbGVtLmdldEF0dHJpYnV0ZSgnZGF0YS1zbGlkZXItbG9vcCcpO1xuXG4gICAgaWYoaXNMb29wID09PSAndHJ1ZScpe1xuICAgICAgICBvcHRpb25zLmxvb3AgPSB0cnVlO1xuICAgICAgICBvcHRpb25zLmNlbnRlcmVkU2xpZGVzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucztcbn1cblxuXG5leHBvcnQge1xuICAgIGlzTG9vcE9uXG59XG4iLCIvKipcbiAqIE5hdmlnYXRpb24gU2xpZGVyIE9wdGlvbnNcbiAqL1xuXG5jb25zdCBpc05hdmlnYXRpb25PbiA9IChlbGVtLCBvcHRpb25zLCBiYXNlbmFtZSwgY3VycmVudElEKSA9PiB7XG4gICAgbGV0IG5leHRFbCA9ICcuc3dpcGVyLWJ1dHRvbi1uZXh0JztcbiAgICBsZXQgcHJldkVsID0gJy5zd2lwZXItYnV0dG9uLXByZXYnO1xuICAgIGxldCBuZXh0SUQsIHByZXZJRCwgc2xpZGVyTmV4dCwgc2xpZGVyUHJldjtcbiAgICBpZighZWxlbSkgcmV0dXJuIG9wdGlvbnM7XG5cbiAgICBsZXQgaXNOYXZpZ2F0aW9uID0gZWxlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2xpZGVyLW5hdmlnYXRpb24nKTtcblxuICAgIGlmKGlzTmF2aWdhdGlvbikge1xuICAgICAgICBvcHRpb25zLm5hdmlnYXRpb24gPSB7fTtcblxuICAgICAgICBpZihiYXNlbmFtZSAmJiAodHlwZW9mIGN1cnJlbnRJRCAhPT0gXCJ1bmRlZmluZWRcIikpIHtcbiAgICAgICAgICAgIG5leHRJRCA9IGAke2Jhc2VuYW1lfS1uZXh0LSR7Y3VycmVudElEfWA7XG4gICAgICAgICAgICBwcmV2SUQgPSBgJHtiYXNlbmFtZX0tcHJldi0ke2N1cnJlbnRJRH1gO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNsaWRlclBhcmVudCA9IGVsZW0uY2xvc2VzdCgnLm0tc2xpZGVyJyk7XG4gICAgICAgIGlmKHNsaWRlclBhcmVudCkge1xuICAgICAgICAgICAgc2xpZGVyTmV4dCA9IHNsaWRlclBhcmVudC5xdWVyeVNlbGVjdG9yKG5leHRFbCk7XG4gICAgICAgICAgICBzbGlkZXJQcmV2ID0gc2xpZGVyUGFyZW50LnF1ZXJ5U2VsZWN0b3IocHJldkVsKTtcbiAgICAgICAgfVxuICAgICAgICBpZihzbGlkZXJOZXh0ICYmIG5leHRJRCkge1xuICAgICAgICAgICAgc2xpZGVyTmV4dC5zZXRBdHRyaWJ1dGUoJ2lkJywgbmV4dElEKTtcbiAgICAgICAgICAgIG9wdGlvbnMubmF2aWdhdGlvbi5uZXh0RWwgPSBgIyR7bmV4dElEfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYoc2xpZGVyUHJldiAmJiBwcmV2SUQpIHtcbiAgICAgICAgICAgIHNsaWRlclByZXYuc2V0QXR0cmlidXRlKCdpZCcsIHByZXZJRCk7XG4gICAgICAgICAgICBvcHRpb25zLm5hdmlnYXRpb24ucHJldkVsID0gYCMke3ByZXZJRH1gO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBvcHRpb25zLm5hdmlnYXRpb24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucztcbn1cblxuXG5cbmV4cG9ydCB7XG4gICAgaXNOYXZpZ2F0aW9uT25cbn1cbiIsIi8qKlxuICogU2xpZGUgdG8gQ2xpY2tlZCBTbGlkZSBTbGlkZXIgT3B0aW9uc1xuICovXG5cbmNvbnN0IGlzU2xpZGVUb0NsaWNlZFNsaWRlT24gPSAoZWxlbSwgb3B0aW9ucykgPT4ge1xuICAgIGlmKCFlbGVtKSByZXR1cm4gb3B0aW9ucztcblxuICAgIGxldCBzbGlkZVRvQ2xpY2VkU2xpZGUgPSBlbGVtLmdldEF0dHJpYnV0ZSgnZGF0YS1zbGlkZXItc2xpZGUtdG8tY2xpY2tlZC1zbGlkZScpO1xuICAgIFxuICAgIGlmKHNsaWRlVG9DbGljZWRTbGlkZSA9PT0gJ3RydWUnKXtcbiAgICAgICAgb3B0aW9ucy5zbGlkZVRvQ2xpY2VkU2xpZGUgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zO1xufVxuXG5cbmV4cG9ydCB7XG4gICAgaXNTbGlkZVRvQ2xpY2VkU2xpZGVPblxufSIsImltcG9ydCB7IHVfaXNUb3VjaERldmljZSB9IGZyb20gXCIuLi8uLi91dGlscy91X2lzLXRvdWNoLWRldmljZVwiO1xuXG5jbGFzcyBTd2lwZXJXaXRoVGFicyB7XG5cbiAgICBjb25zdHJ1Y3Rvcihzd2lwZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIGVsZW1lbnQ6ICcubC1uYXYnLFxuICAgICAgICAgICAgaXRlbTogJy5jLW5hdl9faXRlbScsXG4gICAgICAgICAgICBhY3RpdmU6ICdpcy1hY3RpdmUnLFxuICAgICAgICAgICAgdHJpZ2dlcjogJ2NsaWNrJ1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNUb3VjaCA9IGZhbHNlO1xuICAgICAgICAvLyB1dGlsIGZ1bmN0aW9uIHRvIGNoZWNrIGZvciB0b3VjaCBkZXZpY2VcbiAgICAgICAgdGhpcy5pc1RvdWNoRGV2aWNlKCk7XG5cbiAgICAgICAgLy8gaWYgc3dpcGVyIGlzIG5vdCBpbml0aWFsaXplZCwgZW5kIHRoZSBzY3JpcHRcbiAgICAgICAgaWYoIXN3aXBlci5pbml0aWFsaXplZClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3N3aXBlciBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3dpcGVyID0gc3dpcGVyO1xuXG4gICAgICAgIHRoaXMuY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5kZWZhdWx0cywgb3B0aW9ucyB8fCB7fSk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RvciA9IGAke3RoaXMuY29uZmlnLmVsZW1lbnR9ICR7dGhpcy5jb25maWcuaXRlbX1gO1xuICAgICAgICB0aGlzLml0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0aGlzLnNlbGVjdG9yKTtcblxuICAgICAgICAvLyByZWZlcmVuY2UgdG8gY2xpY2sgZnVuY3Rpb25cbiAgICAgICAgdGhpcy50YWJDbGlja2VkID0gdGhpcy50YWJDbGljay5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cblxuICAgIGluaXQoKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICAvLyBhZGQgZXZlbnQgdGhhdCBjYXRjaGVzIHNsaWRlIGNoYW5nZXNcbiAgICAgICAgc2VsZi5zd2lwZXJTbGlkZUNoYW5nZSgpO1xuICAgICAgICAvLyBiaW5kIGV2ZW50cyB0aGF0IGNhdGNoZXMgdGFicyBjaGFuZ2VzXG4gICAgICAgIHNlbGYuYmluZFRhYnMoKTtcbiAgICB9XG5cbiAgICBiaW5kVGFicygpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGVsZW0gPSBzZWxmLml0ZW1zO1xuXG4gICAgICAgIGVsZW0uZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICAgICAgICB0YWIuYWRkRXZlbnRMaXN0ZW5lcihzZWxmLmNvbmZpZy50cmlnZ2VyLCBzZWxmLnRhYkNsaWNrZWQsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcblxuICAgICAgICAgICAgaWYoc2VsZi5pc1RvdWNoICYmIHNlbGYuY29uZmlnLnRyaWdnZXIgPT09ICdtb3VzZW92ZXInKSB7XG4gICAgICAgICAgICAgICAgdGFiLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBzZWxmLnRhYkNsaWNrZWQsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICB1bmJpbmRUYWJzKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgZWxlbSA9IHNlbGYuaXRlbXM7XG5cbiAgICAgICAgZWxlbS5mb3JFYWNoKCh0YWIpID0+IHtcbiAgICAgICAgICAgIHRhYi5yZW1vdmVFdmVudExpc3RlbmVyKHNlbGYuY29uZmlnLnRyaWdnZXIsIHNlbGYudGFiQ2xpY2tlZCk7XG5cbiAgICAgICAgICAgIGlmKHNlbGYuaXNUb3VjaCAmJiBzZWxmLmNvbmZpZy50cmlnZ2VyID09PSAnbW91c2VvdmVyJykge1xuICAgICAgICAgICAgICAgIHRhYi5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgc2VsZi50YWJDbGlja2VkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICB0YWJDbGljayhldikge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgY3VycmVudFRhYiA9IGV2LmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgIGNvbnN0IGVsZW0gPSBzZWxmLml0ZW1zO1xuXG4gICAgICAgIGxldCBjbGlja2VkVGFiO1xuICAgICAgICBlbGVtLmZvckVhY2goKHRhYiwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRUYWIgPT09IHRhYikge1xuICAgICAgICAgICAgICAgIGNsaWNrZWRUYWIgPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFiLmNsYXNzTGlzdC5yZW1vdmUoc2VsZi5jb25maWcuYWN0aXZlKTtcbiAgICAgICAgfSlcblxuICAgICAgICBjdXJyZW50VGFiLmNsYXNzTGlzdC5hZGQoc2VsZi5jb25maWcuYWN0aXZlKTtcbiAgICAgICAgc2VsZi5zd2lwZXIuc2xpZGVUbyhjbGlja2VkVGFiKTtcbiAgICB9XG5cbiAgICB0YWJDaGFuZ2UoaW5kZXgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGVsZW0gPSBzZWxmLml0ZW1zO1xuICAgICAgICBlbGVtLmZvckVhY2goKHRhYikgPT4ge1xuICAgICAgICAgICAgdGFiLmNsYXNzTGlzdC5yZW1vdmUoc2VsZi5jb25maWcuYWN0aXZlKTtcbiAgICAgICAgfSlcblxuICAgICAgICBlbGVtLmZvckVhY2goKHRhYiwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBpKSB7XG4gICAgICAgICAgICAgICAgdGFiLmNsYXNzTGlzdC5hZGQoc2VsZi5jb25maWcuYWN0aXZlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgIH1cblxuICAgIGlzVG91Y2hEZXZpY2UoKSB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYodV9pc1RvdWNoRGV2aWNlKCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNlbGYuaXNUb3VjaCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzd2lwZXJTbGlkZUNoYW5nZSgpIHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIHNlbGYuc3dpcGVyLm9uKCdzbGlkZUNoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTbGlkZSA9IHNlbGYuc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgICAgICAgICAgc2VsZi50YWJDaGFuZ2UoY3VycmVudFNsaWRlKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTd2lwZXJXaXRoVGFicztcbiIsImltcG9ydCB7IHVfZXh0ZW5kT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvdV9vYmplY3RfZXh0ZW5kJztcbmltcG9ydCB7IHVfc2xpZGVEb3duLCB1X3NsaWRlVXAgfSBmcm9tICcuLi8uLi91dGlscy91X3NsaWRlLXVwLWRvd24nO1xuaW1wb3J0IHsgdV9mYWRlSW4sIHVfZmFkZU91dCB9IGZyb20gJy4uLy4uL3V0aWxzL3VfZmFkZS1pbi1vdXQnO1xuaW1wb3J0IHsgdV9wYXJzZUJvb2wgfSBmcm9tICcuLi8uLi91dGlscy91X3R5cGVzJztcbmltcG9ydCB7IHNjcm9sbFRvVXRpbCB9IGZyb20gJy4uL2FuaW1hdGlvbnMvc2Nyb2xsLXRvJztcbmltcG9ydCB7IGVhc2VJblF1YWQgfSBmcm9tICcuLi9hbmltYXRpb25zL2Vhc2luZ3MtZXM2JztcblxuY2xhc3MgRFNNUEFjY29yZGlvbnMge1xuICAgIGNvbnN0cnVjdG9yKHNlbGVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgIC8vIGRlZmF1bHQgd3JhcHBlciB2YWx1ZVxuICAgICAgICB0aGlzLndyYXBwZXIgPSAnLmpzLWFjYy13cmFwcGVyJztcblxuICAgICAgICB0aGlzLmRlZmF1bHRzID0ge1xuICAgICAgICAgICAgc2VsZWN0b3JzOiB7XG4gICAgICAgICAgICAgICAgaXRlbTogJy5qcy1hY2MtaXRlbScsXG4gICAgICAgICAgICAgICAgdHJpZ2dlcjogJy5qcy1hY2MtYnV0dG9uJyxcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnLmpzLWFjYy1jb250ZW50JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnYWxsZXJ5OiB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyOiAnLmpzLWFjYy1nYWxsZXJ5JyxcbiAgICAgICAgICAgICAgICBpdGVtOiAnLmpzLWFjYy1tZWRpYScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xhc3Nlczoge1xuICAgICAgICAgICAgICAgIGFjdGl2ZTogJ2lzLWFjdGl2ZScsXG4gICAgICAgICAgICAgICAgZm9jdXM6ICdmb2N1cycsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhbmltYXRpb246IHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0cnVlLCAvLyB0cnVlOiB1c2UganMgLCBmYWxzZTogdXNlIGNzc1xuICAgICAgICAgICAgICAgIGdhbGxlcnk6IGZhbHNlLCAvLyB0cnVlOiB1c2UganMgLCBmYWxzZTogdXNlIGNzc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGF0dHI6IHtcbiAgICAgICAgICAgICAgICBjbG9zZTogJ2RhdGEtY2xvc2UnLFxuICAgICAgICAgICAgICAgIG9wZW46ICdkYXRhLWV4cGFuZCcsXG4gICAgICAgICAgICAgICAgZ2FsbGVyeTogJ2RhdGEtZ2FsbGVyeScsXG4gICAgICAgICAgICAgICAgc3RhcnRDbG9zZWQ6ICdkYXRhLXN0YXJ0LWNsb3NlZCcsXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uQ29udGVudDogJ2RhdGEtYW5pbWF0aW9uJyxcbiAgICAgICAgICAgICAgICBhbmltYXRpb25HYWxsZXJ5OiAnZGF0YS1nYWxsZXJ5LWFuaW1hdGlvbicsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2RhdGEtYWNjLWRpc3BsYXknLFxuICAgICAgICAgICAgICAgIHNjcm9sbFRvVmlldzogJ2RhdGEtc2Nyb2xsLXRvLXZpZXcnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9wdDoge1xuICAgICAgICAgICAgICAgIGNsb3NlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBleHBhbmQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGhhc0dhbGxlcnk6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHN0YXJ0Q2xvc2VkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzY3JvbGxUb1ZpZXc6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFyaWE6IHtcbiAgICAgICAgICAgICAgICBidXR0b246ICdoZWFkZXInLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdjb250ZW50JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jb25maWcgPSB1X2V4dGVuZE9iamVjdCh0aGlzLmRlZmF1bHRzLCBvcHRpb25zICk7XG4gICAgICAgIC8vIGNoZWNrIGlmIHdlIGNoYW5nZWQgc2VsZWN0b3JcbiAgICAgICAgaWYgKHR5cGVvZiBzZWxlY3RvciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMud3JhcHBlciA9IHNlbGVjdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZ2V0IG5hbWUgdG8gdXNlIGZvciBhcmlhIGlkJ3MgYW5kIGNvbnRyb2xzXG4gICAgICAgIHRoaXMuZ2V0QXJpYU5hbWUoKTtcblxuICAgICAgICB0aGlzLnNlbGVjdG9yID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLndyYXBwZXIpO1xuXG4gICAgICAgIHRoaXMuZXZlbnRzTGlzdGVuZXJzID0ge307XG5cbiAgICAgICAgdGhpcy5wYXJzZU9wdGlvbnMoKTtcblxuICAgICAgICB0aGlzLnRyaWdnZXIgPSB0aGlzLnNlbGVjdG9yLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWcuc2VsZWN0b3JzLnRyaWdnZXIpO1xuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5zZWxlY3Rvci5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLnNlbGVjdG9ycy5pdGVtKTtcblxuICAgICAgICBpZiAodGhpcy5jb25maWcub3B0Lmhhc0dhbGxlcnkpIHtcbiAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUl0ZW1zID0gdGhpcy5zZWxlY3Rvci5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmdhbGxlcnkuaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhcnJheSBmb3Igc3Rhc2hpbmcgcmVmZXJlbmNlIHRvIGJpbmRlZCBldmVudHNcbiAgICAgICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuXG4gICAgICAgIHRoaXMucHJldmlvdXNJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcblxuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG5cbiAgICBpbml0KCkge1xuICAgICAgICB0aGlzLmFkZEFyaWEoKTtcbiAgICAgICAgdGhpcy5wcmVwYXJlRm9yQW5pbWF0aW9uKCk7XG4gICAgICAgIHRoaXMuYWNjb3JkaW9uQmluZEV2ZW50cygpO1xuICAgIH1cblxuICAgIG9uKGV2ZW50cywgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHJldHVybjtcblxuICAgICAgICBldmVudHMuc3BsaXQoJyAnKS5mb3JFYWNoKChldmVudCwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0pIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSA9IFtdO1xuICAgICAgICAgICAgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdLnB1c2goY2FsbGJhY2spO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvZmYoZXZlbnRzLCBoYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBpZiAoIXNlbGYuZXZlbnRzTGlzdGVuZXJzKSByZXR1cm47XG4gICAgICAgIGV2ZW50cy5zcGxpdCgnICcpLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdID0gW107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSkge1xuICAgICAgICAgICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XS5mb3JFYWNoKChldmVudEhhbmRsZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudEhhbmRsZXIgPT09IGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGVtaXQoLi4uYXJncykge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgICAgICBpZiAoIXNlbGYuZXZlbnRzTGlzdGVuZXJzKSByZXR1cm4gc2VsZjtcbiAgICAgICAgbGV0IGV2ZW50cztcbiAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycgfHwgQXJyYXkuaXNBcnJheShhcmdzWzBdKSkge1xuICAgICAgICAgICAgZXZlbnRzID0gYXJnc1swXTtcbiAgICAgICAgICAgIGRhdGEgPSBhcmdzLnNsaWNlKDEsIGFyZ3MubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnRleHQgPSBzZWxmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXZlbnRzID0gYXJnc1swXS5ldmVudHM7XG4gICAgICAgICAgICBkYXRhID0gYXJnc1swXS5kYXRhO1xuICAgICAgICAgICAgY29udGV4dCA9IGFyZ3NbMF0uY29udGV4dCB8fCBzZWxmO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9jb25zb2xlLmxvZyhldmVudHMsIGRhdGEsIGNvbnRleHQpO1xuICAgICAgICBkYXRhLnVuc2hpZnQoY29udGV4dCk7XG4gICAgICAgIGNvbnN0IGV2ZW50c0FycmF5ID0gQXJyYXkuaXNBcnJheShldmVudHMpID8gZXZlbnRzIDogZXZlbnRzLnNwbGl0KCcgJyk7XG5cbiAgICAgICAgZXZlbnRzQXJyYXkuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChzZWxmLmV2ZW50c0xpc3RlbmVycyAmJiBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0pIHtcbiAgICAgICAgICAgICAgICBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0uZm9yRWFjaCgoZXZlbnRIYW5kbGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlci5hcHBseShjb250ZXh0LCBkYXRhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWNjb3JkaW9uQmluZEV2ZW50cygpIHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgZWxlbSA9IHNlbGYudHJpZ2dlcjtcblxuICAgICAgICBzZWxmLmFkZExpc3RlbmVyRm9jdXMgPSBzZWxmLmFkZExpc3RlbmVyRm9jdXMuYmluZChzZWxmKTtcbiAgICAgICAgc2VsZi5hZGRMaXN0ZW5lckJsdXIgPSBzZWxmLmFkZExpc3RlbmVyQmx1ci5iaW5kKHNlbGYpO1xuICAgICAgICBzZWxmLmFkZEtleUxpc3RlbmVyID0gc2VsZi5hZGRLZXlMaXN0ZW5lci5iaW5kKHNlbGYpO1xuXG4gICAgICAgIHNlbGYub24gPSBzZWxmLm9uLmJpbmQoc2VsZik7XG4gICAgICAgIHNlbGYub2ZmID0gc2VsZi5vZmYuYmluZChzZWxmKTtcbiAgICAgICAgc2VsZi5lbWl0ID0gc2VsZi5lbWl0LmJpbmQoc2VsZik7XG5cbiAgICAgICAgZWxlbS5mb3JFYWNoKChhY2MsIGkpID0+IHtcbiAgICAgICAgICAgIGxldCBoYW5kbGVyRnVuYyA9IHNlbGYuYWNjb3JkaW9uTmF2Q2xpY2suYmluZChzZWxmLCBpKTtcbiAgICAgICAgICAgIHNlbGYuaGFuZGxlcnMucHVzaChoYW5kbGVyRnVuYyk7XG4gICAgICAgICAgICBhY2MuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVyRnVuYywgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgICAgYWNjLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgc2VsZi5hZGRMaXN0ZW5lckZvY3VzLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICBhY2MuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHNlbGYuYWRkTGlzdGVuZXJCbHVyLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgbGV0IGFjY29yZGlvbiA9IHNlbGYuc2VsZWN0b3I7XG4gICAgICAgIGFjY29yZGlvbi5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgc2VsZi5hZGRLZXlMaXN0ZW5lciwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGFjY29yZGlvblVuYmluZEV2ZW50cygpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGVsZW0gPSBzZWxmLnRyaWdnZXI7XG5cbiAgICAgICAgZWxlbS5mb3JFYWNoKChhY2MsIGkpID0+IHtcbiAgICAgICAgICAgIGxldCBlbGVtUGFyZW50ID0gYWNjLmNsb3Nlc3Qoc2VsZi5jb25maWcuc2VsZWN0b3JzLml0ZW0pO1xuICAgICAgICAgICAgbGV0IGVsZW1Db250ZW50ID0gZWxlbVBhcmVudC5xdWVyeVNlbGVjdG9yKHNlbGYuY29uZmlnLnNlbGVjdG9ycy5jb250ZW50KTtcblxuICAgICAgICAgICAgbGV0IGNvbnRyb2wsIGhlYWRlcjtcbiAgICAgICAgICAgIGlmKHNlbGYuY29uZmlnLmFyaWEubmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wgPSBgJHtzZWxmLmNvbmZpZy5hcmlhLm5hbWV9LSR7c2VsZi5jb25maWcuYXJpYS5jb250ZW50fS0ke2l9YDtcbiAgICAgICAgICAgICAgICBoZWFkZXIgPSBgJHtzZWxmLmNvbmZpZy5hcmlhLm5hbWV9LSR7c2VsZi5jb25maWcuYXJpYS5idXR0b259LSR7aX1gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhY2MucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJycpO1xuICAgICAgICAgICAgZWxlbUNvbnRlbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICcnKTtcblxuICAgICAgICAgICAgaWYoc2VsZi5jb25maWcuYXJpYS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgYWNjLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1jb250cm9scycsICcnKTtcbiAgICAgICAgICAgICAgICBhY2MucmVtb3ZlQXR0cmlidXRlKCdpZCcsICcnKTtcbiAgICAgICAgICAgICAgICBlbGVtQ29udGVudC5yZW1vdmVBdHRyaWJ1dGUoJ2lkJywgJycpO1xuICAgICAgICAgICAgICAgIGVsZW1Db250ZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JywgJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlbGVtQ29udGVudC5yZW1vdmVBdHRyaWJ1dGUoJ3JvbGUnLCAnJyk7XG4gICAgICAgICAgICBhY2MucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzZWxmLmhhbmRsZXJzW2ldKTtcbiAgICAgICAgICAgIGFjYy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHNlbGYuYWRkTGlzdGVuZXJGb2N1cyk7XG4gICAgICAgICAgICBhY2MucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsIHNlbGYuYWRkTGlzdGVuZXJCbHVyKTtcbiAgICAgICAgfSlcblxuICAgICAgICBsZXQgYWNjb3JkaW9uID0gc2VsZi5zZWxlY3RvcjtcbiAgICAgICAgYWNjb3JkaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBzZWxmLmFkZEtleUxpc3RlbmVyKTtcbiAgICAgICAgc2VsZi5yZW1vdmVTdHlsZXMoKTtcbiAgICB9XG5cbiAgICBhY2NvcmRpb25OYXZDbGljayhpLCBldikge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgbGV0IGN1cnJlbnRJdGVtQ2xpY2tlZCA9IGV2LmN1cnJlbnRUYXJnZXQ7XG5cbiAgICAgICAgc2VsZi5hY2NvcmRpb25Db250ZW50Y2hhbmdlKGksIGN1cnJlbnRJdGVtQ2xpY2tlZCwgZXYpO1xuXG4gICAgfVxuXG4gICAgYWNjb3JkaW9uQ29udGVudGNoYW5nZShpLCBlbGVtLCBldikge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgbGV0IGN1cnJlbnRJdGVtQ2xpY2tlZCA9IGVsZW07XG4gICAgICAgIGxldCBlbGVtcyA9IHNlbGYuaXRlbXM7XG5cbiAgICAgICAgbGV0IGN1cnJlbnRJdGVtID0gY3VycmVudEl0ZW1DbGlja2VkLmNsb3Nlc3Qoc2VsZi5jb25maWcuc2VsZWN0b3JzLml0ZW0pO1xuICAgICAgICBsZXQgY3VycmVudEl0ZW1Db250ZW50ID0gY3VycmVudEl0ZW0ucXVlcnlTZWxlY3RvcihzZWxmLmNvbmZpZy5zZWxlY3RvcnMuY29udGVudCk7XG4gICAgICAgIGxldCBleHBhbmRlZCA9IGN1cnJlbnRJdGVtQ2xpY2tlZC5nZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnKSA9PT0gJ3RydWUnIHx8IGZhbHNlO1xuXG4gICAgICAgIGlmKGN1cnJlbnRJdGVtLmNsYXNzTGlzdC5jb250YWlucyhzZWxmLmNvbmZpZy5jbGFzc2VzLmFjdGl2ZSkpIHtcbiAgICAgICAgICAgIGlmKHNlbGYuY29uZmlnLm9wdC5jbG9zZSkge1xuICAgICAgICAgICAgICAgIGlmKHNlbGYuY29uZmlnLmFuaW1hdGlvbi5jb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHVfc2xpZGVVcChjdXJyZW50SXRlbUNvbnRlbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IHNlbGYuY29uZmlnLmNsYXNzZXMuZGlzcGxheVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudEl0ZW0uY2xhc3NMaXN0LnJlbW92ZShzZWxmLmNvbmZpZy5jbGFzc2VzLmFjdGl2ZSk7XG4gICAgICAgICAgICAgICAgY3VycmVudEl0ZW1DbGlja2VkLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICFleHBhbmRlZCk7XG4gICAgICAgICAgICAgICAgY3VycmVudEl0ZW1Db250ZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCBleHBhbmRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZighc2VsZi5jb25maWcub3B0LmV4cGFuZCkge1xuICAgICAgICAgICAgICAgIGVsZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW1Db250ZW50ID0gaXRlbS5xdWVyeVNlbGVjdG9yKHNlbGYuY29uZmlnLnNlbGVjdG9ycy5jb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW1UcmlnZ2VyID0gaXRlbS5xdWVyeVNlbGVjdG9yKHNlbGYuY29uZmlnLnNlbGVjdG9ycy50cmlnZ2VyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYoc2VsZi5jb25maWcuYW5pbWF0aW9uLmNvbnRlbnQpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdV9zbGlkZVVwKGl0ZW1Db250ZW50LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogc2VsZi5jb25maWcuY2xhc3Nlcy5kaXNwbGF5XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoc2VsZi5jb25maWcuY2xhc3Nlcy5hY3RpdmUpO1xuICAgICAgICAgICAgICAgICAgICBpdGVtVHJpZ2dlci5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCBleHBhbmRlZCk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1Db250ZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAhZXhwYW5kZWQpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoc2VsZi5jb25maWcuYW5pbWF0aW9uLmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdV9zbGlkZURvd24oY3VycmVudEl0ZW1Db250ZW50LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBzZWxmLmNvbmZpZy5jbGFzc2VzLmRpc3BsYXlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY3VycmVudEl0ZW0uY2xhc3NMaXN0LmFkZChzZWxmLmNvbmZpZy5jbGFzc2VzLmFjdGl2ZSk7XG4gICAgICAgICAgICAgICAgY3VycmVudEl0ZW1DbGlja2VkLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICFleHBhbmRlZCk7XG4gICAgICAgICAgICAgICAgY3VycmVudEl0ZW1Db250ZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCBleHBhbmRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZihzZWxmLmNvbmZpZy5hbmltYXRpb24uY29udGVudCkge1xuICAgICAgICAgICAgICAgICAgICB1X3NsaWRlRG93bihjdXJyZW50SXRlbUNvbnRlbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IHNlbGYuY29uZmlnLmNsYXNzZXMuZGlzcGxheVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudEl0ZW0uY2xhc3NMaXN0LmFkZChzZWxmLmNvbmZpZy5jbGFzc2VzLmFjdGl2ZSk7XG4gICAgICAgICAgICAgICAgY3VycmVudEl0ZW1DbGlja2VkLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICFleHBhbmRlZCk7XG4gICAgICAgICAgICAgICAgY3VycmVudEl0ZW1Db250ZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCBleHBhbmRlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5vcHQuaGFzR2FsbGVyeSkge1xuICAgICAgICAgICAgICAgIHNlbGYuYWNjb3JkaW9uQ2hhbmdlR2FsbGVyeShpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm9wdC5zY3JvbGxUb1ZpZXcpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jdXJyZW50SW5kZXggPCBpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2Nyb2xsVG9BY2NvcmRpb24oaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJldmlvdXNJbmRleCA9IHRoaXMuY3VycmVudEluZGV4O1xuICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IGk7XG5cbiAgICAgICAgc2VsZi5lbWl0KCdhY2NvcmRpb25DaGFuZ2UnLCBldik7XG4gICAgfVxuXG4gICAgbmV4dEFjY29yZGlvbigpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBuZXh0RWxlbSA9IHNlbGYuY3VycmVudEluZGV4O1xuICAgICAgICBjb25zdCBudW1iZXJPZkVsZW0gPSBzZWxmLml0ZW1zLmxlbmd0aDtcblxuICAgICAgICBuZXh0RWxlbSA9PT0gbnVtYmVyT2ZFbGVtIC0gMSA/IG5leHRFbGVtID0gMCA6IG5leHRFbGVtICs9IDE7XG4gICAgICAgIGNvbnN0IG5leHRFbGVtSXRlbSA9IHNlbGYuaXRlbXNbbmV4dEVsZW1dO1xuXG4gICAgICAgIHNlbGYuYWNjb3JkaW9uQ29udGVudGNoYW5nZShuZXh0RWxlbSwgbmV4dEVsZW1JdGVtLCBudWxsKTtcbiAgICB9XG5cbiAgICBwcmV2QWNjb3JkaW9uKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IHByZXZFbGVtID0gc2VsZi5jdXJyZW50SW5kZXg7XG4gICAgICAgIGNvbnN0IG51bWJlck9mRWxlbSA9IHNlbGYuaXRlbXMubGVuZ3RoO1xuXG4gICAgICAgIHByZXZFbGVtID09PSAwID8gcHJldkVsZW0gPSBudW1iZXJPZkVsZW0gLSAxIDogcHJldkVsZW0gLT0gMTtcbiAgICAgICAgY29uc3QgcHJldkVsZW1JdGVtID0gc2VsZi5pdGVtc1twcmV2RWxlbV07XG5cbiAgICAgICAgc2VsZi5hY2NvcmRpb25Db250ZW50Y2hhbmdlKHByZXZFbGVtLCBwcmV2RWxlbUl0ZW0sIG51bGwpO1xuICAgIH1cblxuICAgIGFjY29yZGlvbkNoYW5nZUdhbGxlcnkoaSkge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBnYWxsZXJ5SXRlbXMgPSBbLi4uc2VsZi5nYWxsZXJ5SXRlbXNdO1xuXG4gICAgICAgIGdhbGxlcnlJdGVtcy5mb3JFYWNoKChnYWxsZXJ5KSA9PiB7XG4gICAgICAgICAgICBpZihzZWxmLmNvbmZpZy5hbmltYXRpb24uZ2FsbGVyeSkge1xuICAgICAgICAgICAgICAgIHVfZmFkZU91dChnYWxsZXJ5LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnYWxsZXJ5LmNsYXNzTGlzdC5yZW1vdmUoc2VsZi5jb25maWcuY2xhc3Nlcy5hY3RpdmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld0l0ZW0gPSBnYWxsZXJ5SXRlbXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB1X2ZhZGVJbihuZXdJdGVtLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDUwXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0l0ZW0uY2xhc3NMaXN0LmFkZChzZWxmLmNvbmZpZy5jbGFzc2VzLmFjdGl2ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnYWxsZXJ5LmNsYXNzTGlzdC5yZW1vdmUoc2VsZi5jb25maWcuY2xhc3Nlcy5hY3RpdmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYoIXNlbGYuY29uZmlnLmFuaW1hdGlvbi5nYWxsZXJ5KSB7XG4gICAgICAgICAgICBnYWxsZXJ5SXRlbXNbaV0uY2xhc3NMaXN0LmFkZChzZWxmLmNvbmZpZy5jbGFzc2VzLmFjdGl2ZSk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHByZXBhcmVGb3JBbmltYXRpb24oKSB7XG4gICAgICAgIC8qIGNoZWNrIHdoZXRoZXIgaXRlbXMgY29udGFpbnMgaXMtYWN0aXZlIGNsYXNzLCBpZiBpdHMgbm90IHN0YXJ0IGNsb3NlZCBhbGwsXG4gICAgICAgIGZpcnN0IGl0ZW0gc2hvdWxkIGhhdmUgaXMtYWN0aXZlIGNsYXNzIGFuZCBpdHMgY29udGVudCBzaG91bGQgYmUgc2V0IHRvXG4gICAgICAgIGRpc3BsYXkgYmxvY2sgLyBmbGV4LCBvdGhlcndpc2UsIGhpZGUgaXRcbiAgICAgICAgKi9cbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgaXRlbXMgPSBzZWxmLml0ZW1zO1xuXG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGxldCBhY3RpdmVGb3VuZCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5hbmltYXRpb24uY29udGVudCkge1xuICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgobGlzdCwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1Db250ZW50ID0gbGlzdC5xdWVyeVNlbGVjdG9yKHNlbGYuY29uZmlnLnNlbGVjdG9ycy5jb250ZW50KTtcblxuICAgICAgICAgICAgICAgIGlmIChsaXN0LmNsYXNzTGlzdC5jb250YWlucyhzZWxmLmNvbmZpZy5jbGFzc2VzLmFjdGl2ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxmLmNvbmZpZy5vcHQuc3RhcnRDbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1Db250ZW50LnN0eWxlLmRpc3BsYXkgPSBzZWxmLmNvbmZpZy5jbGFzc2VzLmRpc3BsYXk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgICAgICAgICBhY3RpdmVGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbUNvbnRlbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKCFhY3RpdmVGb3VuZCAmJiAhc2VsZi5jb25maWcub3B0LnN0YXJ0Q2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbTBDb250ZW50ID0gaXRlbXNbMF0ucXVlcnlTZWxlY3RvcihzZWxmLmNvbmZpZy5zZWxlY3RvcnMuY29udGVudCk7XG4gICAgICAgICAgICAgICAgaXRlbXNbMF0uY2xhc3NMaXN0LmFkZChzZWxmLmNvbmZpZy5jbGFzc2VzLmFjdGl2ZSk7XG4gICAgICAgICAgICAgICAgaXRlbTBDb250ZW50LnN0eWxlLmRpc3BsYXkgPSBzZWxmLmNvbmZpZy5jbGFzc2VzLmRpc3BsYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVTdHlsZXMoKSB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IGl0ZW1zID0gc2VsZi5pdGVtcztcblxuICAgICAgICBpZihzZWxmLmNvbmZpZy5hbmltYXRpb24uY29udGVudCkge1xuXG4gICAgICAgICAgICBpdGVtcy5mb3JFYWNoKChsaXN0LCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGl0ZW1Db250ZW50ID0gbGlzdC5xdWVyeVNlbGVjdG9yKHNlbGYuY29uZmlnLnNlbGVjdG9ycy5jb250ZW50KTtcbiAgICAgICAgICAgICAgICBpdGVtQ29udGVudC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VPcHRpb25zKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgICAgICBjb25zdCBpc1NlbGZDbG9zZSA9IHVfcGFyc2VCb29sKHNlbGYuc2VsZWN0b3IuZ2V0QXR0cmlidXRlKHNlbGYuY29uZmlnLmF0dHIuY2xvc2UpKVxuICAgICAgICAgICAgfHwgc2VsZi5jb25maWcub3B0LmNsb3NlO1xuICAgICAgICBpZiAoaXNTZWxmQ2xvc2UpIHtcbiAgICAgICAgICAgIGlzU2VsZkNsb3NlID8gc2VsZi5jb25maWcub3B0LmNsb3NlID0gdHJ1ZSA6IHNlbGYuY29uZmlnLm9wdC5jbG9zZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGlmIGxlYXZlIG9wZW4gaXMgdHJ1ZSwgc2VsZiBjbG9zZSBzaG91bGQgYXV0b21hdGljYWxseSBiZSB0cnVlLFxuICAgICAgICAgKiBvdGhlcndpc2Ugd2Ugd29udCBiZSBhYmxlIHRvIGNsb3NlIG9uIHNlbGYgY2xpY2tcbiAgICAgICAgICovXG5cbiAgICAgICAgY29uc3QgaXNMZWF2ZU9wZW4gPSB1X3BhcnNlQm9vbChzZWxmLnNlbGVjdG9yLmdldEF0dHJpYnV0ZShzZWxmLmNvbmZpZy5hdHRyLm9wZW4pKVxuICAgICAgICAgICAgfHwgc2VsZi5jb25maWcub3B0LmV4cGFuZDtcblxuICAgICAgICBpZiAoaXNMZWF2ZU9wZW4pIHtcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLm9wdC5leHBhbmQgPSB0cnVlO1xuICAgICAgICAgICAgc2VsZi5jb25maWcub3B0LmNsb3NlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLm9wdC5leHBhbmQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzU3RhcnRDbG9zZWQgPSB1X3BhcnNlQm9vbChzZWxmLnNlbGVjdG9yLmdldEF0dHJpYnV0ZShzZWxmLmNvbmZpZy5hdHRyLnN0YXJ0Q2xvc2VkKSlcbiAgICAgICAgICAgIHx8IHNlbGYuY29uZmlnLm9wdC5zdGFydENsb3NlZDtcblxuICAgICAgICBpZiAoaXNTdGFydENsb3NlZCkge1xuICAgICAgICAgICAgc2VsZi5jb25maWcub3B0LnN0YXJ0Q2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLm9wdC5jbG9zZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0dhbGxlcnkgPSB1X3BhcnNlQm9vbChzZWxmLnNlbGVjdG9yLmdldEF0dHJpYnV0ZShzZWxmLmNvbmZpZy5hdHRyLmdhbGxlcnkpKVxuICAgICAgICAgICAgfHwgc2VsZi5jb25maWcub3B0Lmhhc0dhbGxlcnk7XG4gICAgICAgIGlmIChpc0dhbGxlcnkpIHtcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLm9wdC5oYXNHYWxsZXJ5ID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gaWYgd2UgaGF2ZSBnYWxsZXJ5LCBzZWxmIGNsb3NlIGFuZCBleHBhbmQgaXMgYnkgZGVmYXVsdCBvZmZcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLm9wdC5leHBhbmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLm9wdC5jbG9zZSA9IGZhbHNlO1xuICAgICAgICAgICAgc2VsZi5jb25maWcub3B0LnN0YXJ0Q2xvc2VkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbmltYXRlQ29udGVudCA9IHNlbGYuc2VsZWN0b3IuZ2V0QXR0cmlidXRlKHNlbGYuY29uZmlnLmF0dHIuYW5pbWF0aW9uQ29udGVudCk7XG5cbiAgICAgICAgaWYgKGFuaW1hdGVDb250ZW50KSB7XG4gICAgICAgICAgICBhbmltYXRlQ29udGVudCA9PT0gJ2pzJyA/IHNlbGYuY29uZmlnLmFuaW1hdGlvbi5jb250ZW50ID0gdHJ1ZSA6IHNlbGYuY29uZmlnLmFuaW1hdGlvbi5jb250ZW50ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbmltYXRlR2FsbGVyeSA9IHNlbGYuc2VsZWN0b3IuZ2V0QXR0cmlidXRlKHNlbGYuY29uZmlnLmF0dHIuYW5pbWF0aW9uR2FsbGVyeSk7XG4gICAgICAgIGlmIChhbmltYXRlR2FsbGVyeSkge1xuICAgICAgICAgICAgYW5pbWF0ZUdhbGxlcnkgPT09ICdqcycgPyBzZWxmLmNvbmZpZy5hbmltYXRpb24uZ2FsbGVyeSA9IHRydWUgOiBzZWxmLmNvbmZpZy5hbmltYXRpb24uZ2FsbGVyeSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGlzcGxheSA9IHNlbGYuc2VsZWN0b3IuZ2V0QXR0cmlidXRlKHNlbGYuY29uZmlnLmF0dHIuZGlzcGxheSlcbiAgICAgICAgICAgIHx8IHNlbGYuY29uZmlnLmNsYXNzZXMuZGlzcGxheTtcbiAgICAgICAgc2VsZi5jb25maWcuY2xhc3Nlcy5kaXNwbGF5ID0gZGlzcGxheSA9PT0gJ2ZsZXgnID8gJ2ZsZXgnIDogJ2Jsb2NrJztcblxuICAgICAgICBjb25zdCBpc1Njcm9sbFRvVmlldyA9IHVfcGFyc2VCb29sKHNlbGYuc2VsZWN0b3IuZ2V0QXR0cmlidXRlKHNlbGYuY29uZmlnLmF0dHIuc2Nyb2xsVG9WaWV3KSlcbiAgICAgICAgICAgIHx8IHNlbGYuY29uZmlnLm9wdC5zY3JvbGxUb1ZpZXc7XG4gICAgICAgIGlmIChpc1Njcm9sbFRvVmlldykge1xuICAgICAgICAgICAgc2VsZi5jb25maWcub3B0LnNjcm9sbFRvVmlldyA9IHRydWU7XG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5vcHQuZXhwYW5kID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBzZWxmLmVtaXQoJ29wdGlvbnNQYXJzZWQnKTtcbiAgICB9XG5cbiAgICAvLyBzbWFsbCBmdW5jdGlvbiB0byBjaGVjayBmb3IgdmFsaWQgSUQgb2Ygd3JhcHBlclxuICAgIGlzVmFsaWRJZChzKSB7XG4gICAgICAgIHJldHVybiAvXlteXFxzXSskLy50ZXN0KHMpO1xuICAgIH1cblxuICAgIGdldEFyaWFOYW1lKCkge1xuICAgICAgICBjb25zdCBhcmlhTmFtZSA9IHRoaXMud3JhcHBlci5zbGljZSgxKTtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWxpZElkKGFyaWFOYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5jb25maWcuYXJpYS5uYW1lID0gYXJpYU5hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5hcmlhLm5hbWUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZEFyaWEoKSB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IGVsZW0gPSBzZWxmLnRyaWdnZXI7XG5cbiAgICAgICAgZWxlbS5mb3JFYWNoKChhY2MsIGkpID0+IHtcbiAgICAgICAgICAgIGxldCBlbGVtUGFyZW50ID0gYWNjLmNsb3Nlc3Qoc2VsZi5jb25maWcuc2VsZWN0b3JzLml0ZW0pO1xuICAgICAgICAgICAgbGV0IGVsZW1Db250ZW50ID0gZWxlbVBhcmVudC5xdWVyeVNlbGVjdG9yKHNlbGYuY29uZmlnLnNlbGVjdG9ycy5jb250ZW50KTtcblxuICAgICAgICAgICAgbGV0IGNvbnRyb2wsIGhlYWRlcjtcbiAgICAgICAgICAgIGlmKHNlbGYuY29uZmlnLmFyaWEubmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wgPSBgJHtzZWxmLmNvbmZpZy5hcmlhLm5hbWV9LSR7c2VsZi5jb25maWcuYXJpYS5jb250ZW50fS0ke2l9YDtcbiAgICAgICAgICAgICAgICBoZWFkZXIgPSBgJHtzZWxmLmNvbmZpZy5hcmlhLm5hbWV9LSR7c2VsZi5jb25maWcuYXJpYS5idXR0b259LSR7aX1gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihlbGVtUGFyZW50LmNsYXNzTGlzdC5jb250YWlucyhzZWxmLmNvbmZpZy5jbGFzc2VzLmFjdGl2ZSkpIHtcbiAgICAgICAgICAgICAgICBhY2Muc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgZWxlbUNvbnRlbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFjYy5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgZWxlbUNvbnRlbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihzZWxmLmNvbmZpZy5hcmlhLm5hbWUpIHtcbiAgICAgICAgICAgICAgICBhY2Muc2V0QXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJywgY29udHJvbCk7XG4gICAgICAgICAgICAgICAgYWNjLnNldEF0dHJpYnV0ZSgnaWQnLCBoZWFkZXIpO1xuICAgICAgICAgICAgICAgIGVsZW1Db250ZW50LnNldEF0dHJpYnV0ZSgnaWQnLCBjb250cm9sKTtcbiAgICAgICAgICAgICAgICBlbGVtQ29udGVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIGhlYWRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtQ29udGVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAncmVnaW9uJyk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgYWRkTGlzdGVuZXJGb2N1cyhldikge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBlbGVtID0gZXYudGFyZ2V0O1xuXG4gICAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZChzZWxmLmNvbmZpZy5jbGFzc2VzLmZvY3VzKTtcbiAgICB9XG5cbiAgICBhZGRMaXN0ZW5lckJsdXIoZXYpIHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgZWxlbSA9IGV2LnRhcmdldDtcbiAgICAgICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKHNlbGYuY29uZmlnLmNsYXNzZXMuZm9jdXMpO1xuICAgIH1cblxuICAgIGFkZEtleUxpc3RlbmVyKGV2KSB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IGVsZW0gPSBldi50YXJnZXQ7XG4gICAgICAgIGxldCBrZXkgPSBldi53aGljaC50b1N0cmluZygpO1xuXG4gICAgICAgIGxldCB0cmlnZ2VycyA9IFsuLi5zZWxmLnRyaWdnZXJdO1xuXG4gICAgICAgIGxldCB0cmlnZ2VyQ2xhc3MgPSBzZWxmLmNvbmZpZy5zZWxlY3RvcnMudHJpZ2dlci5zbGljZSgxKTtcblxuICAgICAgICAvLyAzMyA9IFBhZ2UgVXAsIDM0ID0gUGFnZSBEb3duXG4gICAgICAgIGxldCBjdHJsTW9kaWZpZXIgPSAoZXYuY3RybEtleSAmJiBrZXkubWF0Y2goLzMzfDM0LykpO1xuXG4gICAgICAgIGlmIChlbGVtLmNsYXNzTGlzdC5jb250YWlucyh0cmlnZ2VyQ2xhc3MpKSB7XG4gICAgICAgICAgICAvLyBVcC8gRG93biBhcnJvdyBhbmQgQ29udHJvbCArIFBhZ2UgVXAvIFBhZ2UgRG93biBrZXlib2FyZCBvcGVyYXRpb25zXG4gICAgICAgICAgICAvLyAzOCA9IFVwLCA0MCA9IERvd25cbiAgICAgICAgICAgIGlmIChrZXkubWF0Y2goLzM4fDQwLykgfHwgY3RybE1vZGlmaWVyKSB7XG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdHJpZ2dlcnMuaW5kZXhPZihlbGVtKTtcbiAgICAgICAgICAgICAgICBsZXQgZGlyZWN0aW9uID0gKGtleS5tYXRjaCgvMzR8NDAvKSkgPyAxIDogLTE7XG4gICAgICAgICAgICAgICAgbGV0IGxlbmd0aCA9IHRyaWdnZXJzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBsZXQgbmV3SW5kZXggPSAoaW5kZXggKyBsZW5ndGggKyBkaXJlY3Rpb24pICUgbGVuZ3RoO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJzW25ld0luZGV4XS5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5Lm1hdGNoKC8zNXwzNi8pKSB7XG4gICAgICAgICAgICAgICAgLy8gMzUgPSBFbmQsIDM2ID0gSG9tZSBrZXlib2FyZCBvcGVyYXRpb25zXG4gICAgICAgICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gR28gdG8gZmlyc3QgYWNjb3JkaW9uXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzM2JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzWzBdLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgLy8gR28gdG8gbGFzdCBhY2NvcmRpb25cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnMzUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnNbdHJpZ2dlcnMubGVuZ3RoIC0gMV0uZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNjcm9sbFRvQWNjb3JkaW9uKGN1cnJlbnRJbmRleCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgZWxlbSA9IHNlbGYudHJpZ2dlclswXTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsQ3VycmVudENvbnRlbnQgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBlbGVtSGVpZ2h0ID0gc2Nyb2xsQ3VycmVudENvbnRlbnQuaGVpZ2h0O1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBlbGVtSGVpZ2h0ICogY3VycmVudEluZGV4O1xuICAgICAgICBjb25zdCBjdXJyZW50U2Nyb2xsUG9zID0gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7XG4gICAgICAgIGNvbnN0IHNjcm9sbFRvID0gc2Nyb2xsQ3VycmVudENvbnRlbnQudG9wICsgY3VycmVudFNjcm9sbFBvcyArIG9mZnNldCAtIDgwO1xuICAgICAgICAvLyBzY3JvbGxJbnRvVmlldygpXG4gICAgICAgIHNjcm9sbFRvVXRpbCh7XG4gICAgICAgICAgICB0bzogc2Nyb2xsVG8sXG4gICAgICAgICAgICBkdXJhdGlvbjogMCxcbiAgICAgICAgICAgIGVhc2luZzogZWFzZUluUXVhZCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IERTTVBBY2NvcmRpb25zO1xuIiwiaW1wb3J0IERTTVBUYWJzQ2xhc3MgZnJvbSAnLi9EU01QVGFic0NsYXNzJztcbmltcG9ydCB7IHVfZXh0ZW5kT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvdV9vYmplY3RfZXh0ZW5kJztcblxuY2xhc3MgRFNNUFRhYnNEcm9wZG93biBleHRlbmRzIERTTVBUYWJzQ2xhc3Mge1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmRlZmF1bHRzID0ge1xuICAgICAgICAgICAgd3JhcHBlcjogJy5qcy10YWJzRHJvcC13cmFwcGVyJyxcbiAgICAgICAgICAgIHNlbGVjdG9yczoge1xuICAgICAgICAgICAgICAgIGRyb3Bkb3duOiAnLmpzLXRhYnMtZHJvcGRvd24nLFxuICAgICAgICAgICAgICAgIHBhbmVsOiAnLmpzLXRhYnMtcGFuZWwnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsYXNzZXM6IHtcbiAgICAgICAgICAgICAgICBhY3RpdmU6ICdpcy1hY3RpdmUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGE6ICdkYXRhLXRhYicsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jb25maWcgPSB1X2V4dGVuZE9iamVjdCh0aGlzLmRlZmF1bHRzLCBvcHRpb25zKTtcblxuICAgICAgICB0aGlzLnNlbGVjdG9yRHJvcGRvd24gPSBgJHt0aGlzLmNvbmZpZy53cmFwcGVyfSAke3RoaXMuY29uZmlnLnNlbGVjdG9ycy5kcm9wZG93bn1gO1xuXG4gICAgICAgIHRoaXMuaXRlbXNEcm9wZG93biA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5zZWxlY3RvckRyb3Bkb3duKTtcblxuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG5cbiAgICBpbml0KCkge1xuICAgICAgICB0aGlzLmJpbmRGdW5jdGlvbnMoKTtcbiAgICAgICAgdGhpcy5iaW5kVGFic0Ryb3Bkb3duRXZlbnQoKTtcbiAgICB9XG5cbiAgICBiaW5kRnVuY3Rpb25zKCkge1xuICAgICAgICB0aGlzLnRhYkRyb3Bkb3duQ2hhbmdlID0gdGhpcy50YWJEcm9wZG93bkNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGJpbmRUYWJzRHJvcGRvd25FdmVudCgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGRyb3Bkb3ducyA9IHNlbGYuaXRlbXNEcm9wZG93bjtcblxuICAgICAgICBkcm9wZG93bnMuZm9yRWFjaCgoZHJvcGRvd24pID0+IHtcbiAgICAgICAgICAgIGRyb3Bkb3duLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHNlbGYudGFiRHJvcGRvd25DaGFuZ2UpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0YWJEcm9wZG93bkNoYW5nZShldikge1xuICAgICAgICBjb25zdCBjdXJyRHJvcGRvd24gPSBldi5jdXJyZW50VGFyZ2V0O1xuICAgICAgICBjb25zdCBjdXJyZW50VGFiSUQgPSBjdXJyRHJvcGRvd24udmFsdWU7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJEcm9wZG93bi5vcHRpb25zLnNlbGVjdGVkSW5kZXg7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyRHJvcGRvd24ub3B0aW9ucy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgY3VyckRyb3Bkb3duLm9wdGlvbnNbaV0ucmVtb3ZlQXR0cmlidXRlKCdzZWxlY3RlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJEcm9wZG93bi5vcHRpb25zW2N1cnJlbnRJbmRleF0uc2V0QXR0cmlidXRlKCdzZWxlY3RlZCcsICdzZWxlY3RlZCcpO1xuXG4gICAgICAgIHN1cGVyLnRhYlBhbmVsQ2hhbmdlKGN1cnJlbnRUYWJJRCk7XG4gICAgfVxuXG4gICAgdW5iaW5kVGFic0Ryb3Bkb3duRXZlbnQoKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBkcm9wZG93bnMgPSBzZWxmLml0ZW1zRHJvcGRvd247XG5cbiAgICAgICAgZHJvcGRvd25zLmZvckVhY2goKGRyb3Bkb3duKSA9PiB7XG4gICAgICAgICAgICBkcm9wZG93bi5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBzZWxmLnRhYkRyb3Bkb3duQ2hhbmdlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IERTTVBUYWJzRHJvcGRvd247XG4iLCJpbXBvcnQgRFNNUFRhYnNDbGFzcyBmcm9tICcuL0RTTVBUYWJzQ2xhc3MnO1xuaW1wb3J0IHsgdV9leHRlbmRPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscy91X29iamVjdF9leHRlbmQnO1xuXG5jbGFzcyBEU01QVGFic1RhYiBleHRlbmRzIERTTVBUYWJzQ2xhc3Mge1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmRlZmF1bHRzID0ge1xuICAgICAgICAgICAgd3JhcHBlcjogJy5qcy10YWJzLXdyYXBwZXInLFxuICAgICAgICAgICAgc2VsZWN0b3JzOiB7XG4gICAgICAgICAgICAgICAgbmF2OiAnLmpzLXRhYnMtbmF2LWl0ZW0nLFxuICAgICAgICAgICAgICAgIHBhbmVsOiAnLmpzLXRhYnMtcGFuZWwnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsYXNzZXM6IHtcbiAgICAgICAgICAgICAgICBhY3RpdmU6ICdpcy1hY3RpdmUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGE6ICdkYXRhLXRhYicsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jb25maWcgPSB1X2V4dGVuZE9iamVjdCh0aGlzLmRlZmF1bHRzLCBvcHRpb25zKTtcblxuICAgICAgICB0aGlzLnNlbGVjdG9yID0gYCR7dGhpcy5jb25maWcud3JhcHBlcn0gJHt0aGlzLmNvbmZpZy5zZWxlY3RvcnMubmF2fWA7XG5cbiAgICAgICAgdGhpcy5pdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5zZWxlY3Rvcik7XG5cbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgaW5pdCgpIHtcbiAgICAgICAgc3VwZXIuYmluZEZ1bmN0aW9ucygpO1xuICAgICAgICBzdXBlci5iaW5kVGFiTmF2RXZlbnQoKTtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgRFNNUFRhYnNUYWI7XG4iLCJpbXBvcnQge3VfZXh0ZW5kT2JqZWN0fSBmcm9tICcuLi8uLi91dGlscy91X29iamVjdF9leHRlbmQnO1xuaW1wb3J0IERTTVBUYWJzQ2xhc3MgZnJvbSAnLi9EU01QVGFic0NsYXNzJztcblxuY2xhc3MgRFNNUFRhYnNUYWJEcm9wZG93biBleHRlbmRzIERTTVBUYWJzQ2xhc3Mge1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmRlZmF1bHRzID0ge1xuICAgICAgICAgICAgd3JhcHBlcjogJy5qcy10YWJzVGFiRHJvcC13cmFwcGVyJyxcbiAgICAgICAgICAgIHNlbGVjdG9yczoge1xuICAgICAgICAgICAgICAgIG5hdjogJy5qcy10YWJzLW5hdi1pdGVtJyxcbiAgICAgICAgICAgICAgICBkcm9wZG93bjogJy5qcy10YWJzLWRyb3Bkb3duJyxcbiAgICAgICAgICAgICAgICBwYW5lbDogJy5qcy10YWJzLXBhbmVsJyxcbiAgICAgICAgICAgICAgICAvLyB1bmRlcmxpbmU6ICcuanMtdGFicy1uYXYtdW5kZXJsaW5lJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGFzc2VzOiB7XG4gICAgICAgICAgICAgICAgYWN0aXZlOiAnaXMtYWN0aXZlJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRhOiAnZGF0YS10YWInLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuY29uZmlnID0gdV9leHRlbmRPYmplY3QodGhpcy5kZWZhdWx0cywgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RvclRhYnMgPSBgJHt0aGlzLmNvbmZpZy53cmFwcGVyfSAke3RoaXMuY29uZmlnLnNlbGVjdG9ycy5uYXZ9YDtcbiAgICAgICAgdGhpcy5zZWxlY3RvckRyb3Bkb3duID0gYCR7dGhpcy5jb25maWcud3JhcHBlcn0gJHt0aGlzLmNvbmZpZy5zZWxlY3RvcnMuZHJvcGRvd259YDtcblxuICAgICAgICB0aGlzLml0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0aGlzLnNlbGVjdG9yVGFicyk7XG4gICAgICAgIHRoaXMuaXRlbXNEcm9wZG93biA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5zZWxlY3RvckRyb3Bkb3duKTtcblxuICAgICAgICB0aGlzLmluaXRUYWJzRHJvcGRvd24oKTtcbiAgICB9XG5cbiAgICBpbml0VGFic0Ryb3Bkb3duKCkge1xuICAgICAgICB0aGlzLmJpbmRGdW5jdGlvbnMoKTtcbiAgICAgICAgdGhpcy5iaW5kVGFiTmF2RXYoKTtcbiAgICAgICAgdGhpcy5iaW5kVGFic0Ryb3Bkb3duRXZlbnQoKTtcbiAgICB9XG5cbiAgICBiaW5kRnVuY3Rpb25zKCkge1xuICAgICAgICB0aGlzLnRhYkRyb3Bkb3duQ2hhbmdlID0gdGhpcy50YWJEcm9wZG93bkNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnRhYk5hdkNsaWNrID0gdGhpcy50YWJOYXZDbGljay5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGJpbmRUYWJzRHJvcGRvd25FdmVudCgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGRyb3Bkb3ducyA9IHNlbGYuaXRlbXNEcm9wZG93bjtcblxuICAgICAgICBkcm9wZG93bnMuZm9yRWFjaCgoZHJvcGRvd24pID0+IHtcbiAgICAgICAgICAgIGRyb3Bkb3duLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHNlbGYudGFiRHJvcGRvd25DaGFuZ2UpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBiaW5kVGFiTmF2RXYoKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBlbGVtID0gc2VsZi5pdGVtcztcblxuICAgICAgICBlbGVtLmZvckVhY2goKHRhYikgPT4ge1xuICAgICAgICAgICAgdGFiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2VsZi50YWJOYXZDbGljaywgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0YWJOYXZDbGljayhldikge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgY3VycmVudFRhYiA9IGV2LmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUYWJJRCA9IHN1cGVyLmdldE5hdlRhYklEKGN1cnJlbnRUYWIpO1xuICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0b3IgPSBjdXJyZW50VGFiLmNsb3Nlc3Qoc2VsZi5jb25maWcud3JhcHBlcik7XG4gICAgICAgIGNvbnN0IGN1cnJlbnREcm9wZG93biA9IGN1cnJlbnRTZWxlY3Rvci5xdWVyeVNlbGVjdG9yKHNlbGYuY29uZmlnLnNlbGVjdG9ycy5kcm9wZG93bik7XG4gICAgICAgIC8vIGNvbnN0IGN1cnJlbnRVbmRlcmxpbmUgPSBjdXJyZW50U2VsZWN0b3IucXVlcnlTZWxlY3RvcihzZWxmLmNvbmZpZy5zZWxlY3RvcnMudW5kZXJsaW5lKTtcblxuICAgICAgICBsZXQgbmV3SW5kZXg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudERyb3Bkb3duLm9wdGlvbnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50RHJvcGRvd24ub3B0aW9uc1tpXS52YWx1ZSA9PT0gY3VycmVudFRhYklEKSB7XG4gICAgICAgICAgICAgICAgbmV3SW5kZXggPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2VsZi51cGRhdGVUYWJOYXYoY3VycmVudFRhYiwgY3VycmVudFVuZGVybGluZSwgbmV3SW5kZXgpO1xuICAgICAgICBzZWxmLnVwZGF0ZVRhYk5hdihjdXJyZW50VGFiLCBuZXdJbmRleCk7XG4gICAgICAgIHNlbGYudXBkYXRlRHJvcGRvd24oY3VycmVudERyb3Bkb3duLCBuZXdJbmRleCk7XG4gICAgICAgIHN1cGVyLnRhYlBhbmVsQ2hhbmdlKGN1cnJlbnRUYWJJRCk7XG4gICAgfVxuXG4gICAgdGFiRHJvcGRvd25DaGFuZ2UoZXYpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGN1cnJEcm9wZG93biA9IGV2LmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJEcm9wZG93bi5vcHRpb25zLnNlbGVjdGVkSW5kZXg7XG5cbiAgICAgICAgY29uc3QgY3VycmVudFRhYklEID0gY3VyckRyb3Bkb3duLnZhbHVlO1xuICAgICAgICBjb25zdCBjdXJyZW50TmF2SXRlbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFske3NlbGYuY29uZmlnLmRhdGF9PScke2N1cnJlbnRUYWJJRH0nXWApO1xuXG4gICAgICAgIHNlbGYudXBkYXRlRHJvcGRvd24oY3VyckRyb3Bkb3duLCBjdXJyZW50SW5kZXgpO1xuICAgICAgICBzZWxmLnVwZGF0ZVRhYk5hdihjdXJyZW50TmF2SXRlbSk7XG4gICAgICAgIHN1cGVyLnRhYlBhbmVsQ2hhbmdlKGN1cnJlbnRUYWJJRCk7XG4gICAgfVxuXG4gICAgdXBkYXRlRHJvcGRvd24oY3VycmVudERyb3AsIG5ld0Ryb3BJbmRleCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgY3VyckRyb3Bkb3duID0gY3VycmVudERyb3A7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IG5ld0Ryb3BJbmRleDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJEcm9wZG93bi5vcHRpb25zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBjdXJyRHJvcGRvd24ub3B0aW9uc1tpXS5yZW1vdmVBdHRyaWJ1dGUoJ3NlbGVjdGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgY3VyckRyb3Bkb3duLm9wdGlvbnNbY3VycmVudEluZGV4XS5zZXRBdHRyaWJ1dGUoJ3NlbGVjdGVkJywgJ3NlbGVjdGVkJyk7XG4gICAgICAgIGN1cnJEcm9wZG93bi5vcHRpb25zLnNlbGVjdGVkSW5kZXggPSBjdXJyZW50SW5kZXg7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlVGFiTmF2KGN1cnJUYWIsIHRhYlVuZGVybGluZSwgY3VyclRhYkluZGV4KSB7XG4gICAgdXBkYXRlVGFiTmF2KGN1cnJUYWIsIGN1cnJUYWJJbmRleCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgY3VycmVudFRhYiA9IGN1cnJUYWI7XG4gICAgICAgIHNlbGYuYWN0aXZlTmF2ID0gY3VyclRhYjtcbiAgICAgICAgY29uc3QgY3VycmVudFNlbGVjdG9yID0gY3VycmVudFRhYi5jbG9zZXN0KHNlbGYuY29uZmlnLndyYXBwZXIpO1xuICAgICAgICBjb25zdCBlbGVtID0gY3VycmVudFNlbGVjdG9yLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZi5jb25maWcuc2VsZWN0b3JzLm5hdik7XG5cbiAgICAgICAgc3VwZXIuY2xlYXJBY3RpdmVDbGFzcyhlbGVtLCAnbmF2Jyk7XG4gICAgICAgIC8vIHN1cGVyLnNldEFjdGl2ZUNsYXNzKGN1cnJlbnRUYWIsIHRhYlVuZGVybGluZSwgY3VyclRhYkluZGV4LCAnbmF2Jyk7XG4gICAgICAgIHN1cGVyLnNldEFjdGl2ZUNsYXNzKGN1cnJlbnRUYWIsICduYXYnKTtcbiAgICB9XG5cbiAgICB1bmJpbmRUYWJzRHJvcEV2ZW50cygpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGRyb3Bkb3ducyA9IHNlbGYuaXRlbXNEcm9wZG93bjtcbiAgICAgICAgY29uc3QgZWxlbSA9IHNlbGYuaXRlbXM7XG5cbiAgICAgICAgZWxlbS5mb3JFYWNoKCh0YWIpID0+IHtcbiAgICAgICAgICAgIHRhYi5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHNlbGYudGFiTmF2Q2xpY2spO1xuICAgICAgICB9KTtcblxuICAgICAgICBkcm9wZG93bnMuZm9yRWFjaCgoZHJvcGRvd24pID0+IHtcbiAgICAgICAgICAgIGRyb3Bkb3duLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHNlbGYudGFiRHJvcGRvd25DaGFuZ2UpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgRFNNUFRhYnNUYWJEcm9wZG93bjtcbiIsImNsYXNzIERTTVBUYWJzQ2xhc3Mge1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZXZlbnRzTGlzdGVuZXJzID0ge307XG4gICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5hY3RpdmVOYXYgPSBudWxsO1xuICAgICAgICB0aGlzLmFjdGl2ZVBhbmVsID0gbnVsbDtcbiAgICB9XG5cbiAgICBiaW5kRnVuY3Rpb25zKCkge1xuICAgICAgICB0aGlzLnRhYk5hdkNsaWNrID0gdGhpcy50YWJOYXZDbGljay5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGJpbmRUYWJOYXZFdmVudCgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGVsZW0gPSBzZWxmLml0ZW1zO1xuXG4gICAgICAgIGVsZW0uZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICAgICAgICB0YWIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzZWxmLnRhYk5hdkNsaWNrLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHVuYmluZFRhYk5hdkV2ZW50KCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgZWxlbSA9IHNlbGYuaXRlbXM7XG5cbiAgICAgICAgZWxlbS5mb3JFYWNoKCh0YWIpID0+IHtcbiAgICAgICAgICAgIHRhYi5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHNlbGYudGFiTmF2Q2xpY2spO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0YWJOYXZDbGljayhldikge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgY3VycmVudFRhYiA9IGV2LmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgIHNlbGYuYWN0aXZlTmF2ID0gZXYuY3VycmVudFRhcmdldDtcbiAgICAgICAgY29uc3QgY3VycmVudFNlbGVjdG9yID0gY3VycmVudFRhYi5jbG9zZXN0KHNlbGYuY29uZmlnLndyYXBwZXIpO1xuICAgICAgICBjb25zdCBlbGVtID0gY3VycmVudFNlbGVjdG9yLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZi5jb25maWcuc2VsZWN0b3JzLm5hdik7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUYWJJRCA9IHNlbGYuZ2V0TmF2VGFiSUQoY3VycmVudFRhYik7XG5cbiAgICAgICAgc2VsZi5jbGVhckFjdGl2ZUNsYXNzKGVsZW0sICduYXYnKTtcbiAgICAgICAgc2VsZi5zZXRBY3RpdmVDbGFzcyhjdXJyZW50VGFiLCAnbmF2Jyk7XG4gICAgICAgIHNlbGYudGFiUGFuZWxDaGFuZ2UoY3VycmVudFRhYklEKTtcbiAgICB9XG5cbiAgICB0YWJQYW5lbENoYW5nZShpbmRleCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgICAgICBpZiAodHlwZW9mIGluZGV4ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYW5lbElEID0gYCR7c2VsZi5jb25maWcuZGF0YX0tJHtpbmRleH1gO1xuICAgICAgICBjb25zdCBjdXJyZW50UGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtjdXJyZW50UGFuZWxJRH1gKTtcbiAgICAgICAgc2VsZi5hY3RpdmVQYW5lbCA9IGN1cnJlbnRQYW5lbDtcbiAgICAgICAgY29uc3QgY3VycmVudFBhbmVsSG9sZGVyID0gY3VycmVudFBhbmVsLmNsb3Nlc3Qoc2VsZi5jb25maWcud3JhcHBlcik7XG4gICAgICAgIGNvbnN0IGVsZW0gPSBjdXJyZW50UGFuZWxIb2xkZXIucXVlcnlTZWxlY3RvckFsbChzZWxmLmNvbmZpZy5zZWxlY3RvcnMucGFuZWwpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgY3VycmVudFBhbmVsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VsZi5jdXJyZW50SW5kZXggPSBpbmRleDtcblxuICAgICAgICBzZWxmLmNsZWFyQWN0aXZlQ2xhc3MoZWxlbSwgJ3BhbmVsJyk7XG4gICAgICAgIHNlbGYuc2V0QWN0aXZlQ2xhc3MoY3VycmVudFBhbmVsLCAncGFuZWwnKTtcbiAgICAgICAgc2VsZi5lbWl0KCd0YWJzQ2hhbmdlJyk7XG4gICAgfVxuXG4gICAgZ2V0TmF2VGFiSUQoaW5kZXgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGRhdGFJRCA9IGluZGV4LmdldEF0dHJpYnV0ZShzZWxmLmNvbmZpZy5kYXRhKTtcbiAgICAgICAgcmV0dXJuIGRhdGFJRDtcbiAgICB9XG5cbiAgICBjbGVhckFjdGl2ZUNsYXNzKGVsZW0sIHNlY3Rpb24pIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGVsZW0uZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICAgICAgICB0YWIuY2xhc3NMaXN0LnJlbW92ZShzZWxmLmNvbmZpZy5jbGFzc2VzLmFjdGl2ZSk7XG5cbiAgICAgICAgICAgIGlmIChzZWN0aW9uID09PSAncGFuZWwnKSB7XG4gICAgICAgICAgICAgICAgdGFiLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWN0aW9uID09PSAnbmF2Jykge1xuICAgICAgICAgICAgICAgIHRhYi5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldEFjdGl2ZUNsYXNzKGVsZW0sIHNlY3Rpb24pIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZChzZWxmLmNvbmZpZy5jbGFzc2VzLmFjdGl2ZSk7XG4gICAgICAgIGlmIChzZWN0aW9uID09PSAncGFuZWwnKSB7XG4gICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY3Rpb24gPT09ICduYXYnKSB7XG4gICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0Rmlyc3RBY3RpdmUoaSA9IDApIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGVsZW1zID0gc2VsZi5pdGVtcztcbiAgICAgICAgY29uc3QgY3VycmVudFRhYiA9IGVsZW1zW2ldO1xuICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0b3IgPSBjdXJyZW50VGFiLmNsb3Nlc3Qoc2VsZi5jb25maWcud3JhcHBlcik7XG4gICAgICAgIGNvbnN0IGVsZW0gPSBjdXJyZW50U2VsZWN0b3IucXVlcnlTZWxlY3RvckFsbChzZWxmLmNvbmZpZy5zZWxlY3RvcnMubmF2KTtcbiAgICAgICAgY29uc3QgY3VycmVudFRhYklEID0gc2VsZi5nZXROYXZUYWJJRChjdXJyZW50VGFiKTtcblxuICAgICAgICBzZWxmLmNsZWFyQWN0aXZlQ2xhc3MoZWxlbSwgJ25hdicpO1xuICAgICAgICBzZWxmLnNldEFjdGl2ZUNsYXNzKGN1cnJlbnRUYWIsICduYXYnKTtcbiAgICAgICAgc2VsZi50YWJQYW5lbENoYW5nZShjdXJyZW50VGFiSUQpO1xuICAgIH1cblxuICAgIG9uKGV2ZW50cywgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHJldHVybjtcblxuICAgICAgICBldmVudHMuc3BsaXQoJyAnKS5mb3JFYWNoKChldmVudCwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0pIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSA9IFtdO1xuICAgICAgICAgICAgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdLnB1c2goY2FsbGJhY2spO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvZmYoZXZlbnRzLCBoYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBpZiAoIXNlbGYuZXZlbnRzTGlzdGVuZXJzKSByZXR1cm47XG4gICAgICAgIGV2ZW50cy5zcGxpdCgnICcpLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdID0gW107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSkge1xuICAgICAgICAgICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XS5mb3JFYWNoKChldmVudEhhbmRsZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudEhhbmRsZXIgPT09IGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGVtaXQoLi4uYXJncykge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgICAgICBpZiAoIXNlbGYuZXZlbnRzTGlzdGVuZXJzKSByZXR1cm4gc2VsZjtcbiAgICAgICAgbGV0IGV2ZW50cztcbiAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycgfHwgQXJyYXkuaXNBcnJheShhcmdzWzBdKSkge1xuICAgICAgICAgICAgZXZlbnRzID0gYXJnc1swXTtcbiAgICAgICAgICAgIGRhdGEgPSBhcmdzLnNsaWNlKDEsIGFyZ3MubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnRleHQgPSBzZWxmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXZlbnRzID0gYXJnc1swXS5ldmVudHM7XG4gICAgICAgICAgICBkYXRhID0gYXJnc1swXS5kYXRhO1xuICAgICAgICAgICAgY29udGV4dCA9IGFyZ3NbMF0uY29udGV4dCB8fCBzZWxmO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9jb25zb2xlLmxvZyhldmVudHMsIGRhdGEsIGNvbnRleHQpO1xuICAgICAgICBkYXRhLnVuc2hpZnQoY29udGV4dCk7XG4gICAgICAgIGNvbnN0IGV2ZW50c0FycmF5ID0gQXJyYXkuaXNBcnJheShldmVudHMpID8gZXZlbnRzIDogZXZlbnRzLnNwbGl0KCcgJyk7XG5cbiAgICAgICAgZXZlbnRzQXJyYXkuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChzZWxmLmV2ZW50c0xpc3RlbmVycyAmJiBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0pIHtcbiAgICAgICAgICAgICAgICBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0uZm9yRWFjaCgoZXZlbnRIYW5kbGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlci5hcHBseShjb250ZXh0LCBkYXRhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IERTTVBUYWJzQ2xhc3M7IiwiaW1wb3J0IERTTVBBY2NvcmRpb25zIGZyb20gXCIuL0RTTVBBY2NvcmRpb25zXCI7XG5pbXBvcnQgRFNNUFRhYnNUYWIgZnJvbSBcIi4vRFNNUFRhYnMtdGFiXCI7XG5pbXBvcnQge3VfdGhyb3R0bGVkfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcblxuXG5jbGFzcyBEU01QVGFiVG9BY2NvcmRpb25Nb2JpbGUge1xuICAgIGNvbnN0cnVjdG9yKHNlbGVjdG9yKSB7XG4gICAgICAgIHRoaXMudGFiYWNjSUQgPSAnI2pzLXRhYi1hY2MnO1xuICAgICAgICB0aGlzLnRhYmFjY1NlbGVjdG9yID0gJy5qcy10YWJzLXRvLWFjYy13cmFwcGVyJztcbiAgICAgICAgdGhpcy50YWJhY2NJdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy50YWJhY2NTZWxlY3Rvcik7XG5cbiAgICAgICAgdGhpcy50YWJPcHRpb25zID0ge1xuICAgICAgICAgICAgd3JhcHBlcjogICAgICAgICcuanMtdGFicy13cmFwcGVyJyxcbiAgICAgICAgICAgIHNlbGVjdG9yczoge1xuICAgICAgICAgICAgICAgIG5hdjogICAgICAgICcuanMtdGFicy1uYXYtaXRlbScsXG4gICAgICAgICAgICAgICAgcGFuZWw6ICAgICAgJy5qcy10YWJzLXBhbmVsJyxcbiAgICAgICAgICAgICAgICAvLyB1bmRlcmxpbmU6ICAnLmpzLXRhYnMtbmF2LXVuZGVybGluZScsXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY2NvcmRpb25PcHRpb25zID0ge1xuICAgICAgICAgICAgc2VsZWN0b3JzOiB7XG4gICAgICAgICAgICAgICAgaXRlbTogICAgICAgJy5qcy10YWJzLXBhbmVsJyxcbiAgICAgICAgICAgICAgICB0cmlnZ2VyOiAgICAnLmpzLXRhYnMtbGFiZWwnLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICAgICcuanMtdGEtY29udGVudCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcHQgOiB7XG4gICAgICAgICAgICAgICAgY2xvc2U6ICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgZXhwYW5kOiAgICAgICAgIHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xhc3Nlczoge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6ICAgICAgJ2ZsZXgnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFuaW1hdGlvbjoge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICAgIHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc01vYmlsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzRGVza3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYWNjb3JkaW9uSW5zdGFuY2U7XG4gICAgICAgIHRoaXMudGFiSW5zdGFuY2U7XG5cbiAgICAgICAgaWYodHlwZW9mIHNlbGVjdG9yICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmFjY0lEID0gc2VsZWN0b3I7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG5cbiAgICBpbml0KCkge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBjdXJyZW50V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgICAgY3VycmVudFdpZHRoIDwgMTAyNSA/IHRoaXMuaXNNb2JpbGUgPSB0cnVlIDogdGhpcy5pc0Rlc2t0b3AgPSB0cnVlO1xuXG4gICAgICAgIGlmKHNlbGYuaXNNb2JpbGUpIHNlbGYuYnVpbGRBY2NvcmRpb24oKTtcbiAgICAgICAgaWYoc2VsZi5pc0Rlc2t0b3ApIHNlbGYuYnVpbGRUYWIoKTtcblxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4ge1xuICAgICAgICAgICAgc2VsZi50aHJvdHRsZVNjcm9sbCgpO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIHRoaXMudGhyb3R0bGVTY3JvbGwgPSB1X3Rocm90dGxlZCgoKSA9PiB7XG4gICAgICAgICAgICBzZWxmLmJ1aWxkVGFiQWNjb3JkaW9uKCk7XG4gICAgICAgIH0sIDE1MCk7XG5cblxuICAgICAgICBzZWxmLmJ1aWxkVGFiQWNjb3JkaW9uKCk7XG4gICAgfVxuXG4gICAgYnVpbGRUYWJBY2NvcmRpb24oKSB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IG5ld1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG5cbiAgICAgICAgaWYobmV3V2lkdGggPCAxMDI1KSB7XG4gICAgICAgICAgICBpZighc2VsZi5pc01vYmlsZSkge1xuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBzZWxmLnRhYkluc3RhbmNlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYudGFiSW5zdGFuY2UudW5iaW5kVGFiTmF2RXZlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi50YWJJbnN0YW5jZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VsZi5idWlsZEFjY29yZGlvbigpO1xuICAgICAgICAgICAgICAgIHNlbGYuaXNEZXNrdG9wID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc2VsZi5pc01vYmlsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZighc2VsZi5pc0Rlc2t0b3ApIHtcbiAgICAgICAgICAgICAgICBpZih0eXBlb2Ygc2VsZi5hY2NvcmRpb25JbnN0YW5jZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmFjY29yZGlvbkluc3RhbmNlLmFjY29yZGlvblVuYmluZEV2ZW50cygpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmFjY29yZGlvbkluc3RhbmNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRUYWIoKTtcbiAgICAgICAgICAgICAgICBzZWxmLmlzTW9iaWxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc2VsZi5pc0Rlc2t0b3AgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYnVpbGRBY2NvcmRpb24oKSB7XG4gICAgICAgIHRoaXMuYWNjb3JkaW9uSW5zdGFuY2UgPSBuZXcgRFNNUEFjY29yZGlvbnModGhpcy50YWJhY2NJRCwgdGhpcy5hY2NvcmRpb25PcHRpb25zKTtcbiAgICB9XG5cbiAgICBidWlsZFRhYigpIHtcbiAgICAgICAgdGhpcy50YWJPcHRpb25zLndyYXBwZXIgPSB0aGlzLnRhYmFjY0lEO1xuICAgICAgICB0aGlzLnRhYkluc3RhbmNlID0gbmV3IERTTVBUYWJzVGFiKHRoaXMudGFiT3B0aW9ucyk7XG4gICAgICAgIHRoaXMudGFiSW5zdGFuY2Uuc2V0Rmlyc3RBY3RpdmUoKTtcbiAgICB9XG5cbn1cbmV4cG9ydCBkZWZhdWx0IERTTVBUYWJUb0FjY29yZGlvbk1vYmlsZTsiLCIvKipcbiAqIFRPRE86XG4gKiBETyBOT1QgVVNFIFRISVMsIFNUSUxMIElOIERFVkVMT1BNRU5UXG4gKi9cblxuXG5jbGFzcyBUYWJBY2NvcmRpb24ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnLmpzLXRhYnMtcGFuZWwnLFxuICAgICAgICAgICAgbmF2aWdhdGlvbjogJy5qcy10YWJzLW5hdicsXG4gICAgICAgICAgICB0YWJzOiB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyOiAnLmwtdGFic19fcGFuZWwnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjb3JkaW9uIDoge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnLmwtdGFic19fbGFiZWwnLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcubC10YWJzX19jb250ZW50J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hdjoge1xuICAgICAgICAgICAgICAgIGl0ZW06ICcuYy10YWJzLW5hdl9fbGluaydcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VsZWN0b3IgPSBgJHt0aGlzLmNvbmZpZy5uYXZpZ2F0aW9ufSAke3RoaXMuY29uZmlnLm5hdi5pdGVtfWA7XG4gICAgICAgLy8gY29uc29sZS5sb2codGhpcy5zZWxlY3Rvcik7XG5cbiAgICAgICAgdGhpcy5pdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5zZWxlY3Rvcik7XG5cbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLml0ZW1zKTtcblxuICAgICAgICB0aGlzLmtleXMgPSB7XG4gICAgICAgICAgICBlbmQ6IDM1LFxuICAgICAgICAgICAgaG9tZTogMzYsXG4gICAgICAgICAgICBsZWZ0OiAzNyxcbiAgICAgICAgICAgIHVwOiAzOCxcbiAgICAgICAgICAgIHJpZ2h0OiAzOSxcbiAgICAgICAgICAgIGRvd246IDQwLFxuICAgICAgICAgICAgZGVsZXRlOiA0NixcbiAgICAgICAgICAgIGVudGVyOiAxMyxcbiAgICAgICAgICAgIHNwYWNlOiAzMlxuICAgICAgICB9XG4gICAgICAgIHRoaXMua2V5c0RpcmVjdGlvbiA9IHtcbiAgICAgICAgICAgIDM3OiAtMSxcbiAgICAgICAgICAgIDM4OiAtMSxcbiAgICAgICAgICAgIDM5OiAxLFxuICAgICAgICAgICAgNDA6IDFcbiAgICAgICAgfVxuXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3RhYi1hY2NvcmRpb24nKTtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgaW5pdCgpIHtcblxuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJBY2NvcmRpb247IiwiaW1wb3J0IHsgc2Nyb2xsVG9VdGlsIH0gZnJvbSBcIi4uL2FuaW1hdGlvbnMvc2Nyb2xsLXRvXCI7XG5pbXBvcnQgeyBlYXNlSW5PdXRRdWFydCB9IGZyb20gXCIuLi9hbmltYXRpb25zL2Vhc2luZ3MtZXM2XCI7XG5pbXBvcnQgeyB1X3Rocm90dGxlZCB9IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgdV9zbGlkZURvd24sIHVfc2xpZGVVcCB9IGZyb20gXCIuLi8uLi91dGlscy91X3NsaWRlLXVwLWRvd25cIjtcbmltcG9ydCB7IHVfaXNFbGVtZW50SXNJblZpZXcgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdV9lbC1pbi12aWV3cG9ydC1kZXRlY3RcIjtcblxuLyoqXG4gKiBUT0RPOlxuICogRE8gTk9UIFVTRSBUSElTLCBTVElMTCBJTiBERVZFTE9QTUVOVFxuICovXG5cbmNsYXNzIERTTVBUYWIge1xuICAgIGNvbnN0cnVjdG9yKGFvcykge1xuICAgICAgICB0aGlzLnNjcm9sbCA9IHt9O1xuICAgICAgICB0aGlzLnNlbGVjdG9yID0gJy5qcy10YWJzLW5hdiAuYy10YWJzLW5hdl9fbGluayc7XG4gICAgICAgIHRoaXMubW9iaWxlU2VsZWN0b3IgPSAnLmpzLXRhYnMtcGFuZWwgLmwtdGFic19fbGFiZWwnO1xuXG4gICAgICAgIHRoaXMuaXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuc2VsZWN0b3IpO1xuICAgICAgICB0aGlzLml0ZW1zTW9iaWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0aGlzLm1vYmlsZVNlbGVjdG9yKTtcblxuICAgICAgICB0aGlzLmFvcyA9IGFvcztcblxuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG5cbiAgICBpbml0KCkge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIHNlbGYuYmluZENoYW5nZVRhYiA9IHRoaXMuY2hhbmdlVGFiLmJpbmQodGhpcyk7XG4gICAgICAgIHNlbGYuYmluZENoYW5nZVNsaWRlID0gdGhpcy5jaGFuZ2VTbGlkZS5iaW5kKHRoaXMpO1xuICAgICAgICBzZWxmLmJpbmRTY3JvbGxBY2NvcmRpb24gPSB0aGlzLnNjcm9sbEFjY29yZGlvbi5iaW5kKHRoaXMpO1xuICAgICAgICBzZWxmLmJpbmRSZXNpemVBY2NvcmRpb24gPSB0aGlzLnJlc2l6ZUFjY29yZGlvbi5iaW5kKHRoaXMpO1xuXG5cblxuICAgICAgICBbLi4uc2VsZi5pdGVtc10uZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICAgICAgICB0YWIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzZWxmLmJpbmRDaGFuZ2VUYWIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBbLi4uc2VsZi5pdGVtc01vYmlsZV0uZm9yRWFjaCgobGFiZWwpID0+IHtcbiAgICAgICAgICAgIGxhYmVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2VsZi5iaW5kQ2hhbmdlU2xpZGUpO1xuICAgICAgICB9KVxuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aHJvdGxlUmVzaXplQWNjb3JkaW9uKCk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgdGhyb3RsZVJlc2l6ZUFjY29yZGlvbiA9IHVfdGhyb3R0bGVkKCgpID0+IHtcbiAgICAgICAgICAgIHNlbGYuYmluZFJlc2l6ZUFjY29yZGlvbigpO1xuICAgICAgICB9LCAyNTApO1xuXG4gICAgICAgIGNvbnN0IHRocm90bGVBY2NvcmRpb25TY3JvbGwgPSB1X3Rocm90dGxlZCgoKSA9PiB7XG4gICAgICAgICAgICBzZWxmLmJpbmRTY3JvbGxBY2NvcmRpb24oKTtcbiAgICAgICAgfSwgMTUwKTtcblxuICAgICAgICBzZWxmLmJpbmRSZXNpemVBY2NvcmRpb24oKTtcbiAgICB9XG5cblxuICAgIGNoYW5nZVRhYihldikge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGxldCBjdXJyZW50SXRlbUNsaWNrZWQgPSBldi5jdXJyZW50VGFyZ2V0O1xuICAgICAgICBsZXQgdGFiSXRlbSA9IGN1cnJlbnRJdGVtQ2xpY2tlZC5nZXRBdHRyaWJ1dGUoJ2FyaWEtY29udHJvbHMnKTtcblxuICAgICAgICBsZXQgY3VycmVudEl0ZW0gPSBjdXJyZW50SXRlbUNsaWNrZWQuY2xvc2VzdCgnLmMtdGFicy1uYXZfX2l0ZW0nKTtcblxuICAgICAgICBsZXQgY3VycmVudExpc3QgPSBjdXJyZW50SXRlbUNsaWNrZWQuY2xvc2VzdCgnLmpzLXRhYnMtbmF2Jyk7XG5cbiAgICAgICAgbGV0IGl0ZW1zID0gY3VycmVudExpc3QucXVlcnlTZWxlY3RvckFsbCgnLmMtdGFicy1uYXZfX2xpbmsnKTtcblxuICAgICAgICBpZighY3VycmVudEl0ZW1DbGlja2VkLmNsYXNzTGlzdC5jb250YWlucygnaXMtYWN0aXZlJykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgJ2ZhbHNlJylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY3VycmVudEl0ZW1DbGlja2VkLmNsYXNzTGlzdC5hZGQoJ2lzLWFjdGl2ZScpO1xuICAgICAgICAgICAgY3VycmVudEl0ZW1DbGlja2VkLnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsICd0cnVlJylcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0YWJzUGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuanMtdGFicy1wYW5lbCAubC10YWJzX19wYW5lbCcpO1xuXG4gICAgICAgIHRhYnNQYW5lbC5mb3JFYWNoKCh0YWJzLCBpKSA9PiB7XG4gICAgICAgICAgICB0YWJzLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWFjdGl2ZScsICdpcy1jdXJyZW50Jyk7XG4gICAgICAgICAgICB0YWJzLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpXG4gICAgICAgIH0pO1xuICAgICAgICB0YWJzUGFuZWwuZm9yRWFjaCgodGFiYmVkLCBpKSA9PiB7XG4gICAgICAgICAgICBsZXQgY3VycmVudFRhYiA9IHRhYmJlZC5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgICAgICBpZihjdXJyZW50VGFiID09PSB0YWJJdGVtKSB7XG4gICAgICAgICAgICAgICAgdGFiYmVkLmNsYXNzTGlzdC5hZGQoJ2lzLWFjdGl2ZScsICdpcy1jdXJyZW50Jyk7XG4gICAgICAgICAgICAgICAgdGFiYmVkLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2hhbmdlU2xpZGUoZXYpIHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGxldCBjdXJyZW50SXRlbUNsaWNrZWQgPSBldi5jdXJyZW50VGFyZ2V0O1xuXG4gICAgICAgIGxldCBjdXJyZW50SXRlbSA9IGN1cnJlbnRJdGVtQ2xpY2tlZC5jbG9zZXN0KCcubC10YWJzX19wYW5lbCcpO1xuICAgICAgICBsZXQgY3VycmVudENvbnRlbnQgPSBjdXJyZW50SXRlbS5xdWVyeVNlbGVjdG9yKCcubC10YWJzX19jb250ZW50Jyk7XG5cbiAgICAgICAgbGV0IGVsZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmpzLXRhYnMtcGFuZWwgLmwtdGFic19fcGFuZWwnKTtcbiAgICAgICAgZWxlbXMuZm9yRWFjaCgobGFiZWwsIGkpID0+IHtcbiAgICAgICAgICAgIGlmKGxhYmVsID09PSBjdXJyZW50SXRlbSkge1xuICAgICAgICAgICAgICAgIGlmKCFjdXJyZW50SXRlbS5jbGFzc0xpc3QuY29udGFpbnMoJ2lzLWN1cnJlbnQnKSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50SXRlbS5jbGFzc0xpc3QuYWRkKCdpcy1jdXJyZW50Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGFiZWwuY2xhc3NMaXN0LnJlbW92ZSgnaXMtY3VycmVudCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGlmKGN1cnJlbnRJdGVtLmNsYXNzTGlzdC5jb250YWlucygnaXMtYWN0aXZlJykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBzY3JvbGxDdXJyZW50Q29udGVudCA9IGN1cnJlbnRDb250ZW50Lm9mZnNldFRvcDtcbiAgICAgICAgICAgIGxldCBjdXJyZW50U2Nyb2xsUG9zID0gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7XG5cbiAgICAgICAgICAgIGxldCBzY3JvbGxUbyA9IGN1cnJlbnRDb250ZW50Lm9mZnNldFRvcCAtIDk5O1xuXG4gICAgICAgICAgICBpZihjdXJyZW50U2Nyb2xsUG9zID4gc2Nyb2xsQ3VycmVudENvbnRlbnQgLSA1MCkge1xuICAgICAgICAgICAgICAgIHNjcm9sbFRvVXRpbCAoe1xuICAgICAgICAgICAgICAgICAgICB0bzogc2Nyb2xsVG8sXG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIGVhc2luZzogZWFzZUluT3V0UXVhcnRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyB3aW5kb3cuc2Nyb2xsVG8oIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgdG9wOiBzY3JvbGxUb1xuICAgICAgICAgICAgICAgIC8vIH0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVfc2xpZGVVcChjdXJyZW50Q29udGVudCk7XG4gICAgICAgICAgICBjdXJyZW50SXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdpcy1hY3RpdmUnKTtcbiAgICAgICAgICAgIGN1cnJlbnRJdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWN1cnJlbnQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHVfc2xpZGVEb3duKGN1cnJlbnRDb250ZW50LCB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGN1cnJlbnRJdGVtLmNsYXNzTGlzdC5hZGQoJ2lzLWFjdGl2ZScpO1xuXG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNjcm9sbEFjY29yZGlvbigpIHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgY3VycmVudFdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG5cbiAgICAgICAgbGV0IGlzQ3VycmVudCA9IFtdO1xuICAgICAgICBsZXQgZWxlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuanMtdGFicy1wYW5lbCAubC10YWJzX19jb250ZW50Jyk7XG4gICAgICAgIGVsZW1zLmZvckVhY2goKGxhYmVsLCBpKSA9PiB7XG4gICAgICAgICAgICBsZXQgZWxlbUl0ZW0gPSAgbGFiZWwuY2xvc2VzdCgnLmwtdGFic19fcGFuZWwnKTtcbiAgICAgICAgICAgIGlmKGVsZW1JdGVtLmNsYXNzTGlzdC5jb250YWlucygnaXMtYWN0aXZlJykpe1xuICAgICAgICAgICAgICAgIGlmKHVfaXNFbGVtZW50SXNJblZpZXcobGFiZWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzQ3VycmVudC5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBsZXQgY3VycmVudExlbmd0aCA9IGlzQ3VycmVudC5sZW5ndGg7XG5cbiAgICAgICAgaWYoY3VycmVudExlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVsZW1zLmZvckVhY2goKGl0ZW0sIGopID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbUl0ZW0gPSBpdGVtLmNsb3Nlc3QoJy5sLXRhYnNfX3BhbmVsJyk7XG5cbiAgICAgICAgICAgICAgICBpZihpc0N1cnJlbnRbMF0gPT09IGopIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoIWVsZW1JdGVtLmNsYXNzTGlzdC5jb250YWlucygnaXMtY3VycmVudCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtSXRlbS5jbGFzc0xpc3QuYWRkKCdpcy1jdXJyZW50Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1JdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWN1cnJlbnQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzaXplQWNjb3JkaW9uKCkge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBjdXJyZW50V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcblxuXG4gICAgICAgIGlmKGN1cnJlbnRXaWR0aCA+IDEwMjQpIHtcblxuICAgICAgICAgICAgbGV0IGVsZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmpzLXRhYnMtcGFuZWwgLmwtdGFic19fY29udGVudCcpO1xuICAgICAgICAgICAgbGV0IGN1cnJlbnQgPSAwO1xuICAgICAgICAgICAgZWxlbXMuZm9yRWFjaCgobGFiZWwsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbUl0ZW0gPSAgbGFiZWwuY2xvc2VzdCgnLmwtdGFic19fcGFuZWwnKTtcbiAgICAgICAgICAgICAgICBpZihlbGVtSXRlbS5jbGFzc0xpc3QuY29udGFpbnMoJ2lzLWN1cnJlbnQnKSl7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbGVtSXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdpcy1hY3RpdmUnKTtcbiAgICAgICAgICAgICAgICBsYWJlbC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaWYoZWxlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGVsZW1zW2N1cnJlbnRdLmNsb3Nlc3QoJy5sLXRhYnNfX3BhbmVsJykuY2xhc3NMaXN0LmFkZCgnaXMtYWN0aXZlJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB0YWJzRWxlbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5qcy10YWJzLW5hdiAuYy10YWJzLW5hdl9fbGluaycpO1xuICAgICAgICAgICAgdGFic0VsZW0uZm9yRWFjaCgodGFiLCBqKSA9PiB7XG4gICAgICAgICAgICAgICAgdGFiLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWFjdGl2ZScpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGlmKHRhYnNFbGVtLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0YWJzRWxlbVtjdXJyZW50XS5jbGFzc0xpc3QuYWRkKCdpcy1hY3RpdmUnKTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJyxzZWxmLmJpbmRTY3JvbGxBY2NvcmRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHNlbGYuYmluZFNjcm9sbEFjY29yZGlvbik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERTTVBUYWI7IiwiZXhwb3J0IGZ1bmN0aW9uIGxvYWRNb3JlUG9zdHMoKSB7XG5cbiAgICAoZnVuY3Rpb24gKCQpIHtcbiAgICAgICAgZnVuY3Rpb24gZG9uZSgpe1xuICAgICAgICAgICAgdmFyIG5ld1Bvc3RzID0gJChcIi5sLWxhdGVzdC1jYXQtaXRlbS5sb2FkZWQ6bm90KGRvbmUpXCIpO1xuICAgICAgICAgICAgZnVuY3Rpb24gYWRkRGVsYXllZENsYXNzKHNlbGVjdG9yLCBjbGFzc05hbWUsIGRlbGF5KSB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IGFsbCB0aGUgZWxlbWVudHMgbWF0Y2hpbmcgdGhlIHNlbGVjdG9yXG4gICAgICAgICAgICAgICAgdmFyIGVsZW1lbnRzID0gJChzZWxlY3Rvcik7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggZWxlbWVudCBhbmQgYWRkIHRoZSBjbGFzcyB3aXRoIGEgZGVsYXlcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5lYWNoKGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9ICQodGhpcyk7XG4gICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmFkZENsYXNzKGNsYXNzTmFtZSk7XG4gICAgICAgICAgICAgICAgICB9LCBkZWxheSAqIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWRkRGVsYXllZENsYXNzKG5ld1Bvc3RzLCBcImRvbmVcIiwgMTEwKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgJCgnI2xvYWRfbW9yZV9wb3N0cycpLm9uKCAnY2xpY2snLCAoZSkgPT4ge1xuXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBjb25zdCBidXR0b24gPSAkKCcjbG9hZF9tb3JlX3Bvc3RzJyk7XG4gICAgICAgICAgICBjb25zdCBwYWdlZCA9IGJ1dHRvbi5hdHRyKCdkYXRhLXBhZ2VkJyk7XG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGJ1dHRvbi5hdHRyKCdkYXRhLXRvdGFsJyk7XG4gICAgICAgICAgICBjb25zdCBhdXRob3IgPSBidXR0b24uYXR0cignZGF0YS1hdXRob3InKTtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RTZWN0aW9uID0gJCgnI3Bvc3RzX3dyYXAnKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbldyYXBwZXIgPSAkKCcubGF0ZXN0LWNhdC5sb3dlciAubW9yZS13cmFwJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiAnbW9yZV9ibG9nX3Bvc3RzJyxcbiAgICAgICAgICAgICAgICBub25jZTogZHMubm9uY2UsXG4gICAgICAgICAgICAgICAgY3VycmVudFBhZ2U6IHBhZ2VkLFxuICAgICAgICAgICAgICAgIGF1dGhvcixcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiBkcy5hamF4X3VybCwgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24gKHhocikge1xuICAgICAgICAgICAgICAgICAgICBidXR0b24uYWRkQ2xhc3MoJ2xvYWRpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgfSwgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICQobGlzdFNlY3Rpb24pLmFwcGVuZChkYXRhLnBvc3RzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZG9uZSgpLCAxMTApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uYXR0cignZGF0YS1wYWdlZCcsIGRhdGEucGFnZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLnJlbW92ZUNsYXNzKCdsb2FkaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnBhZ2VkID09IHRvdGFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgIH0pO1xuXG4gICAgfShqUXVlcnkpKTtcblxufSIsImV4cG9ydCBmdW5jdGlvbiB0YWJzVGFiRHJvcCgpIHtcblxuICAgIGNvbnN0IHRhYkl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmpzLXRhYnMtbmF2LWl0ZW0nKTtcbiAgICB0YWJJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBFbnRlciBrZXkgaXMgcHJlc3NlZFxuICAgICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5jbGljaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGdyaWRkZXJMaXN0SXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZ3JpZGRlci1saXN0LmwtdGVhbV9faXRlbScpO1xuICAgIGdyaWRkZXJMaXN0SXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgRW50ZXIga2V5IGlzIHByZXNzZWRcbiAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAgICAgICAgIGl0ZW0uY2xpY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn1cbiIsIlxuY29uc3QgdV9oYXNDbGFzcyA9IChlbCwgY2xzKSA9PiB7XG4gICAgaWYgKGVsLmNsYXNzTmFtZS5tYXRjaCgnKD86XnxcXFxccyknICsgY2xzICsgJyg/IVxcXFxTKScpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuY29uc3QgdV9hZGRDbGFzcyA9IChlbCwgY2xzKSA9PiB7XG4gICAgaWYgKCFlbC5jbGFzc05hbWUubWF0Y2goJyg/Ol58XFxcXHMpJyArIGNscyArICcoPyFcXFxcUyknKSkge1xuICAgICAgICBlbC5jbGFzc05hbWUgKz0gJyAnICsgY2xzO1xuICAgIH1cbn1cblxuY29uc3QgdV9kZWxDbGFzcyA9IChlbCwgY2xzKSA9PiB7XG4gICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lLnJlcGxhY2UobmV3IFJlZ0V4cCgnKD86XnxcXFxccyknICsgY2xzICsgJyg/IVxcXFxTKScpLCAnJyk7XG59XG5cbmV4cG9ydCB7XG4gICAgdV9oYXNDbGFzcyxcbiAgICB1X2FkZENsYXNzLFxuICAgIHVfZGVsQ2xhc3Ncbn0iLCIvKipcbiAqIHBhcmFtczogIHRyaWdnZXIgZWxlbWVudCwgdGFyZ2V0IGVsZW1lbnQgY2xhc3MsIGNsYXNzZXMgdG8gYWRkIHRvIHRhcmdldCBlbGVtZW50LCB0cmlnZ2VyIGVsZW1lbnQgZGlzdGFuY2UgZnJvbSB0b3AsIHVuaXQgKCdwZXJjZW50JyBvciAncGl4ZWxzJylcbiAqIHVzYWdlOiAgIGVsZW1lbnRGcm9tVG9wKGVsZW1UcmlnZ2VyLCBlbGVtVGFyZ2V0LCBjbGFzc1RvQWRkLCBkaXN0YW5jZUZyb21Ub3AsIHVuaXQpO1xuICpcbiAqIGh0dHA6Ly9ibG9nLmZvZndlYmRlc2lnbi5jby51ay80MS1hZGQtY2xhc3Nlcy10by1hbi1lbGVtZW50LXdoZW4tc2Nyb2xsZWQtaW50by12aWV3cG9ydFxuICovXG5pbXBvcnQge1xuICAgIHVfYWRkQ2xhc3MsXG4gICAgdV9oYXNDbGFzcyxcbiAgICB1X2RlbENsYXNzXG59IGZyb20gXCIuL3VfY2xhc3NsaXN0LWFkZC1yZW1vdmVcIjtcblxuY29uc3QgdV9lbGVtZW50RnJvbVRvcCA9IChlbGVtVHJpZ2dlciwgZWxlbVRhcmdldCwgY2xhc3NUb0FkZCwgZGlzdGFuY2VGcm9tVG9wLCB1bml0KSA9PiB7XG4gICAgbGV0IHdpblkgPSB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCxcbiAgICAgICAgZWxUcmlnZ2VyTGVuZ3RoID0gZWxlbVRyaWdnZXIubGVuZ3RoLFxuICAgICAgICBlbFRhcmdldExlbmd0aCwgZGlzdFRvcCwgZGlzdFBlcmNlbnQsIGRpc3RQaXhlbHMsIGRpc3RVbml0LCBlbFRhcmdldCwgaSwgajtcbiAgICBmb3IgKGkgPSAwOyBpIDwgZWxUcmlnZ2VyTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgZWxUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGVsZW1UYXJnZXQpO1xuICAgICAgICBlbFRhcmdldExlbmd0aCA9IGVsVGFyZ2V0Lmxlbmd0aDtcbiAgICAgICAgZGlzdFRvcCA9IGVsZW1UcmlnZ2VyW2ldLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICAgICAgZGlzdFBlcmNlbnQgPSBNYXRoLnJvdW5kKChkaXN0VG9wIC8gd2luWSkgKiAxMDApO1xuICAgICAgICBkaXN0UGl4ZWxzID0gTWF0aC5yb3VuZChkaXN0VG9wKTtcbiAgICAgICAgZGlzdFVuaXQgPSB1bml0ID09ICdwZXJjZW50JyA/IGRpc3RQZXJjZW50IDogZGlzdFBpeGVscztcbiAgICAgICAgaWYgKGRpc3RVbml0IDw9IGRpc3RhbmNlRnJvbVRvcCkge1xuICAgICAgICAgICAgaWYgKCF1X2hhc0NsYXNzKGVsZW1UcmlnZ2VyW2ldLCBlbGVtVGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBlbFRhcmdldExlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdV9oYXNDbGFzcyhlbFRhcmdldFtqXSwgY2xhc3NUb0FkZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVfYWRkQ2xhc3MoZWxUYXJnZXRbal0sIGNsYXNzVG9BZGQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIXVfaGFzQ2xhc3MoZWxlbVRyaWdnZXJbaV0sIGNsYXNzVG9BZGQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVfYWRkQ2xhc3MoZWxlbVRyaWdnZXJbaV0sIGNsYXNzVG9BZGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVfZGVsQ2xhc3MoZWxlbVRyaWdnZXJbaV0sIGNsYXNzVG9BZGQpO1xuICAgICAgICAgICAgaWYgKCF1X2hhc0NsYXNzKGVsZW1UcmlnZ2VyW2ldLCBlbGVtVGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBlbFRhcmdldExlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgIHVfZGVsQ2xhc3MoZWxUYXJnZXRbal0sIGNsYXNzVG9BZGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuY29uc3QgdV9pc0VsZW1lbnRJc0luVmlldyA9IChlbCkgPT4ge1xuICAgIGNvbnN0IHNjcm9sbCA9IHdpbmRvdy5zY3JvbGxZIHx8IHdpbmRvdy5wYWdlWU9mZnNldFxuICAgIGNvbnN0IGJvdW5kc1RvcCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIHNjcm9sbFxuXG4gICAgY29uc3Qgdmlld3BvcnQgPSB7XG4gICAgICAgIHRvcDogc2Nyb2xsLFxuICAgICAgICBib3R0b206IHNjcm9sbCArIHdpbmRvdy5pbm5lckhlaWdodCxcbiAgICB9XG5cbiAgICBjb25zdCBib3VuZHMgPSB7XG4gICAgICAgIHRvcDogYm91bmRzVG9wLFxuICAgICAgICBib3R0b206IGJvdW5kc1RvcCArIGVsLmNsaWVudEhlaWdodCxcbiAgICB9XG5cbiAgICByZXR1cm4gKCBib3VuZHMuYm90dG9tID49IHZpZXdwb3J0LnRvcCAmJiBib3VuZHMuYm90dG9tIDw9IHZpZXdwb3J0LmJvdHRvbSApXG4gICAgICAgIHx8ICggYm91bmRzLnRvcCA8PSB2aWV3cG9ydC5ib3R0b20gJiYgYm91bmRzLnRvcCA+PSB2aWV3cG9ydC50b3AgKTtcbn1cblxuZXhwb3J0IHtcbiAgICB1X2VsZW1lbnRGcm9tVG9wLFxuICAgIHVfaXNFbGVtZW50SXNJblZpZXdcbn1cbiIsIi8qKlxuICogaHR0cHM6Ly93d3cuaWxlYXJuamF2YXNjcmlwdC5jb20vcGxhaW5qcy1mYWRlaW4tZmFkZW91dC9cbiAqXG4gKiBUT0RPOiB0aGVyZSBhcmUgYmV0dGVyIGZhZGVJbiBmYWRlT3V0IHNjcmlwdHMgd2l0aCBhbmltYXRpb24gZWFzaW5nc1xuICovXG5cbi8vIGV4cG9ydCBjb25zdCBmYWRlSW4gPSAoZWwsIGRpc3BsYXlTdHlsZSA9ICdibG9jaycsIHNtb290aCA9IHRydWUpID0+IHtcbi8vICAgICBlbC5zdHlsZS5vcGFjaXR5ID0gMDtcbi8vICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gZGlzcGxheVN0eWxlO1xuLy8gICAgIGlmIChzbW9vdGgpIHtcbi8vICAgICAgICAgbGV0IG9wYWNpdHkgPSAwO1xuLy8gICAgICAgICBsZXQgcmVxdWVzdDtcbi8vXG4vLyAgICAgICAgIGNvbnN0IGFuaW1hdGlvbiA9ICgpID0+IHtcbi8vICAgICAgICAgICAgIGVsLnN0eWxlLm9wYWNpdHkgPSBvcGFjaXR5ICs9IDAuMDQ7XG4vLyAgICAgICAgICAgICBpZiAob3BhY2l0eSA+PSAxKSB7XG4vLyAgICAgICAgICAgICAgICAgb3BhY2l0eSA9IDE7XG4vLyAgICAgICAgICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmVxdWVzdCk7XG4vLyAgICAgICAgICAgICB9XG4vLyAgICAgICAgIH07XG4vL1xuLy8gICAgICAgICBjb25zdCByQWYgPSAoKSA9PiB7XG4vLyAgICAgICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJBZik7XG4vLyAgICAgICAgICAgICBhbmltYXRpb24oKTtcbi8vICAgICAgICAgfTtcbi8vICAgICAgICAgckFmKCk7XG4vL1xuLy8gICAgIH0gZWxzZSB7XG4vLyAgICAgICAgIGVsLnN0eWxlLm9wYWNpdHkgPSAxO1xuLy8gICAgIH1cbi8vIH07XG4vL1xuLy8gZXhwb3J0IGNvbnN0IGZhZGVPdXQgPSAoZWwsIGRpc3BsYXlTdHlsZSA9ICdub25lJywgc21vb3RoID0gdHJ1ZSApID0+IHtcbi8vICAgICBpZiAoc21vb3RoKSB7XG4vLyAgICAgICAgIGxldCBvcGFjaXR5ID0gZWwuc3R5bGUub3BhY2l0eTtcbi8vICAgICAgICAgbGV0IHJlcXVlc3Q7XG4vL1xuLy8gICAgICAgICBjb25zdCBhbmltYXRpb24gPSAoKSA9PiB7XG4vLyAgICAgICAgICAgICBlbC5zdHlsZS5vcGFjaXR5ID0gb3BhY2l0eSAtPSAwLjA0O1xuLy8gICAgICAgICAgICAgaWYgKG9wYWNpdHkgPD0gMCkge1xuLy8gICAgICAgICAgICAgICAgIG9wYWNpdHkgPSAwO1xuLy8gICAgICAgICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBkaXNwbGF5U3R5bGU7XG4vLyAgICAgICAgICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmVxdWVzdCk7XG4vLyAgICAgICAgICAgICB9XG4vLyAgICAgICAgIH07XG4vL1xuLy8gICAgICAgICBjb25zdCByQWYgPSAoKSA9PiB7XG4vLyAgICAgICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJBZik7XG4vLyAgICAgICAgICAgICBhbmltYXRpb24oKTtcbi8vICAgICAgICAgfTtcbi8vICAgICAgICAgckFmKCk7XG4vL1xuLy8gICAgIH0gZWxzZSB7XG4vLyAgICAgICAgIGVsLnN0eWxlLm9wYWNpdHkgPSAwO1xuLy8gICAgIH1cbi8vIH07XG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgICBkdXJhdGlvbjogMTAwLFxuICAgIGNvbXBsZXRlKCkge1xuXG4gICAgfVxufTtcblxuY29uc3QgYW5pbWF0ZUZhZGUgPSAob3B0aW9ucykgPT4ge1xuICAgIGxldCBzdGFydCA9IG5ldyBEYXRlO1xuICAgIGxldCBpZCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkge1xuICAgICAgICBsZXQgdGltZVBhc3NlZCA9IG5ldyBEYXRlIC0gc3RhcnQ7XG4gICAgICAgIGxldCBwcm9ncmVzcyA9IHRpbWVQYXNzZWQgLyBvcHRpb25zLmR1cmF0aW9uO1xuICAgICAgICBpZiAocHJvZ3Jlc3MgPiAxKSB7XG4gICAgICAgICAgICBwcm9ncmVzcyA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5wcm9ncmVzcyA9IHByb2dyZXNzO1xuICAgICAgICBsZXQgZGVsdGEgPSBvcHRpb25zLmRlbHRhKHByb2dyZXNzKTtcbiAgICAgICAgb3B0aW9ucy5zdGVwKGRlbHRhKTtcbiAgICAgICAgaWYgKHByb2dyZXNzID09IDEpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaWQpO1xuICAgICAgICAgICAgaWYodHlwZW9mIG9wdGlvbnMuY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBvcHRpb25zLmRlbGF5IHx8IDEwKTtcbn1cblxuZXhwb3J0IGNvbnN0IHVfZmFkZUluID0gKGVsZW1lbnQsIG9wdGlvbnM9IHt9KSA9PiB7XG4gICAgaWYodHlwZW9mIG9wdGlvbnMuZHVyYXRpb24gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgb3B0aW9ucy5kdXJhdGlvbiA9IGRlZmF1bHRzLmR1cmF0aW9uO1xuICAgIH1cbiAgICBsZXQgdG8gPSAwO1xuICAgIGFuaW1hdGVGYWRlKHtcbiAgICAgICAgZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sXG4gICAgICAgIGRlbHRhKHByb2dyZXNzKSB7XG4gICAgICAgICAgICBwcm9ncmVzcyA9IHRoaXMucHJvZ3Jlc3M7XG4gICAgICAgICAgICByZXR1cm4gZWFzaW5ncy5zd2luZyhwcm9ncmVzcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlOiBvcHRpb25zLmNvbXBsZXRlLFxuICAgICAgICBzdGVwKGRlbHRhKSB7XG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlLm9wYWNpdHkgPSB0byArIGRlbHRhO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCB1X2ZhZGVPdXQgPSAoZWxlbWVudCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgaWYodHlwZW9mIG9wdGlvbnMuZHVyYXRpb24gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgb3B0aW9ucy5kdXJhdGlvbiA9IGRlZmF1bHRzLmR1cmF0aW9uO1xuICAgIH1cbiAgICBsZXQgdG8gPSAxO1xuICAgIGFuaW1hdGVGYWRlKHtcbiAgICAgICAgZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sXG4gICAgICAgIGRlbHRhKHByb2dyZXNzKSB7XG4gICAgICAgICAgICBwcm9ncmVzcyA9IHRoaXMucHJvZ3Jlc3M7XG4gICAgICAgICAgICByZXR1cm4gZWFzaW5ncy5zd2luZyhwcm9ncmVzcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlOiBvcHRpb25zLmNvbXBsZXRlLFxuICAgICAgICBzdGVwKGRlbHRhKSB7XG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlLm9wYWNpdHkgPSB0byAtIGRlbHRhO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmNvbnN0IGVhc2luZ3MgPSB7XG4gICAgbGluZWFyOiBmdW5jdGlvbihwcm9ncmVzcykge1xuICAgICAgICByZXR1cm4gcHJvZ3Jlc3M7XG4gICAgfSxcbiAgICBxdWFkcmF0aWM6IGZ1bmN0aW9uKHByb2dyZXNzKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnBvdyhwcm9ncmVzcywgMik7XG4gICAgfSxcbiAgICBzd2luZzogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcbiAgICAgICAgcmV0dXJuIDAuNSAtIE1hdGguY29zKHByb2dyZXNzICogTWF0aC5QSSkgLyAyO1xuICAgIH0sXG4gICAgY2lyYzogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcbiAgICAgICAgcmV0dXJuIDEgLSBNYXRoLnNpbihNYXRoLmFjb3MocHJvZ3Jlc3MpKTtcbiAgICB9LFxuICAgIGJhY2s6IGZ1bmN0aW9uKHByb2dyZXNzLCB4KSB7XG4gICAgICAgIHJldHVybiBNYXRoLnBvdyhwcm9ncmVzcywgMikgKiAoKHggKyAxKSAqIHByb2dyZXNzIC0geCk7XG4gICAgfSxcbiAgICBib3VuY2U6IGZ1bmN0aW9uKHByb2dyZXNzKSB7XG4gICAgICAgIGZvciAodmFyIGEgPSAwLCBiID0gMSwgcmVzdWx0OyAxOyBhICs9IGIsIGIgLz0gMikge1xuICAgICAgICAgICAgaWYgKHByb2dyZXNzID49ICg3IC0gNCAqIGEpIC8gMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLU1hdGgucG93KCgxMSAtIDYgKiBhIC0gMTEgKiBwcm9ncmVzcykgLyA0LCAyKSArIE1hdGgucG93KGIsIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBlbGFzdGljOiBmdW5jdGlvbihwcm9ncmVzcywgeCkge1xuICAgICAgICByZXR1cm4gTWF0aC5wb3coMiwgMTAgKiAocHJvZ3Jlc3MgLSAxKSkgKiBNYXRoLmNvcygyMCAqIE1hdGguUEkgKiB4IC8gMyAqIHByb2dyZXNzKTtcbiAgICB9XG59IiwiaW1wb3J0IHsgdV90aHJvdHRsZWQgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG4vKipcbiAqIHN0YW5kYWxvbmUgZnVuY3Rpb24gdGhhdCBjaGVja3Mgd2hldGhlciBkZXZpY2UgaXMgdG91Y2ggb3Igbm90XG4gKiBjYWxsIGl0IHdpdGhpbiBhbnl0aGluZyxcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCB1X2lzVG91Y2hEZXZpY2UgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICgnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cgfHxcbiAgICAgICAgICAgICAgICAod2luZG93LkRvY3VtZW50VG91Y2ggJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCBpbnN0YW5jZW9mIHdpbmRvdy5Eb2N1bWVudFRvdWNoKSkpIHx8XG4gICAgICAgICEhKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAobmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzIHx8IG5hdmlnYXRvci5tc01heFRvdWNoUG9pbnRzKSlcbiAgICApO1xufVxuXG4vKipcbiAqIGZ1bmN0aW9uIHRoYXQgY2FsbHMgaXNUb3VjaERldmljZSBmdW5jdGlvbixcbiAqL1xuY29uc3QgaXNUb3VjaEh0bWxVdGlsID0gKCkgPT4ge1xuICAgIGxldCB0b3VjaCA9IHVfaXNUb3VjaERldmljZSgpO1xuICAgIGxldCBodG1sID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICdodG1sJyApWzBdO1xuXG4gICAgLy8gaWYgdHJ1ZSwgYWRkIHRvdWNoLWRldmljZSB0byBodG1sLCBvdGhlcndpc2Ugbm8tdG91Y2gtZGV2aWNlXG4gICAgaWYgKHRvdWNoKSB7XG4gICAgICAgIGh0bWwuY2xhc3NMaXN0LnJlbW92ZSgnbm8tdG91Y2gtZGV2aWNlJyk7XG4gICAgICAgIGh0bWwuY2xhc3NMaXN0LmFkZCgndG91Y2gtZGV2aWNlJyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBodG1sLmNsYXNzTGlzdC5yZW1vdmUoJ3RvdWNoLWRldmljZScpO1xuICAgICAgICBodG1sLmNsYXNzTGlzdC5hZGQoJ25vLXRvdWNoLWRldmljZScpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBleHBvcnRlZCBmdW5jdGlvbiBhZGRUb3VjaFRvSHRtbFV0aWxcbiAqIGltcG9ydGVkIGludG8gaW5kZXguanMgYW5kIGNhbGxlZCB3aGVuIERPTVJlYWR5LFxuICogY29udGFpbnMgJ3Jlc2l6ZScgZXZlbnQgbGlzdGVuZXIgdG8gY2hlY2sgZm9yXG4gKiBkZXZpY2Ugb3JpZW50YXRpb24sIG9yIGNoYW5nZXNcbiAqIGlzIHRocm90dGxlZCwgdG8gcHJldmVudCBjb250aW51b3VzbHkgdHJpZ2dlcmluZ1xuICogKG1pbiAzMDBtcyBzbyBjaHJvbWUgZGV2IHRvb2wgY2FuIGNhdGNoIGl0KVxuICovXG5jb25zdCB1X2FkZFRvdWNoVG9IdG1sID0gKCkgPT4ge1xuICAgIGlzVG91Y2hIdG1sVXRpbCgpO1xuXG4gICAgLy8gdGhyb3R0bGUgdGhlIGZ1bmN0aW9uXG4gICAgY29uc3QgdGhyb3R0bGVJc1RvdWNoID0gdV90aHJvdHRsZWQoKCkgPT4ge1xuICAgICAgICBpc1RvdWNoSHRtbFV0aWwoKTtcbiAgICB9LCAzMDApO1xuXG4gICAgLy8gYmluZCByZXNpemUgZXZlbnRcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4ge1xuICAgICAgICB0aHJvdHRsZUlzVG91Y2goKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IHtcbiAgICB1X2lzVG91Y2hEZXZpY2UsXG4gICAgdV9hZGRUb3VjaFRvSHRtbFxufTtcblxuIiwiY29uc3QgdV9leHRlbmRPYmplY3QgPSAoZGVzdGluYXRpb24sIHNvdXJjZSkgPT4ge1xuICAgIGZvciAobGV0IHByb3BlcnR5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoc291cmNlW3Byb3BlcnR5XSAmJiBzb3VyY2VbcHJvcGVydHldLmNvbnN0cnVjdG9yICYmXG4gICAgICAgICAgICBzb3VyY2VbcHJvcGVydHldLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uW3Byb3BlcnR5XSA9IGRlc3RpbmF0aW9uW3Byb3BlcnR5XSB8fCB7fTtcbiAgICAgICAgICAgIHVfZXh0ZW5kT2JqZWN0KGRlc3RpbmF0aW9uW3Byb3BlcnR5XSwgc291cmNlW3Byb3BlcnR5XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbltwcm9wZXJ0eV0gPSBzb3VyY2VbcHJvcGVydHldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkZXN0aW5hdGlvbjtcbn07XG5cbmNvbnN0IHVfZXh0ZW5kID0gKGRlZmF1bHRzLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZXh0ZW5kZWRPcHRpb25zID0ge307XG4gICAgZm9yIChsZXQga2V5IGluIGRlZmF1bHRzKSB7XG4gICAgICAgIGV4dGVuZGVkT3B0aW9uc1trZXldID0gb3B0aW9uc1trZXldIHx8IGRlZmF1bHRzW2tleV07XG4gICAgfVxuICAgIHJldHVybiBleHRlbmRlZE9wdGlvbnM7XG59O1xuXG5jb25zdCB1X21lcmdlRGVlcCA9ICh0YXJnZXQsIHNvdXJjZSkgPT4ge1xuICAgIGNvbnN0IGlzT2JqZWN0ID0gKG9iaikgPT4gb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnO1xuXG4gICAgaWYgKCFpc09iamVjdCh0YXJnZXQpIHx8ICFpc09iamVjdChzb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMoc291cmNlKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldFZhbHVlID0gdGFyZ2V0W2tleV07XG4gICAgICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gc291cmNlW2tleV07XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0VmFsdWUpICYmIEFycmF5LmlzQXJyYXkoc291cmNlVmFsdWUpKSB7XG4gICAgICAgICAgICB0YXJnZXRba2V5XSA9IHRhcmdldFZhbHVlLmNvbmNhdChzb3VyY2VWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QodGFyZ2V0VmFsdWUpICYmIGlzT2JqZWN0KHNvdXJjZVZhbHVlKSkge1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB1X21lcmdlRGVlcChPYmplY3QuYXNzaWduKHt9LCB0YXJnZXRWYWx1ZSksIHNvdXJjZVZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlVmFsdWU7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0YXJnZXQ7XG59XG5cbmV4cG9ydCB7XG4gICAgdV9leHRlbmQsXG4gICAgdV9leHRlbmRPYmplY3QsXG4gICAgdV9tZXJnZURlZXBcbn07IiwiLyoqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vamFucmVtYm9sZC9lczYtc2xpZGUtdXAtZG93blxuICpcbiAqIHVzYWdlIHdpdGggZWFzaW5nc1xuICpcbiAqL1xuXG5pbXBvcnQgeyB1X2V4dGVuZCB9IGZyb20gXCIuL3Vfb2JqZWN0X2V4dGVuZFwiO1xuaW1wb3J0IHsgdV9pc0ludGVnZXIgfSBmcm9tIFwiLi91X3R5cGVzXCI7XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuICAgIGR1cmF0aW9uOiAyNTAsXG4gICAgZWFzaW5nOiAoY3VycmVudFRpbWUsIHN0YXJ0VmFsdWUsIGRpZmZWYWx1ZSwgZHVyZWF0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiAtZGlmZlZhbHVlICogKGN1cnJlbnRUaW1lIC89IGR1cmVhdGlvbikgKiAoY3VycmVudFRpbWUgLSAyKSArIHN0YXJ0VmFsdWU7XG4gICAgfSxcbiAgICBkaXNwbGF5OiAnYmxvY2snXG59O1xuY29uc3QgZGlyZWN0aW9ucyA9IHtcbiAgICBPUEVOOiAxLFxuICAgIENMT1NFOiAyXG59O1xuZXhwb3J0IGNvbnN0IHVfc2xpZGVVcCA9IChlbGVtZW50LCBhcmdzID0ge30pID0+IHtcbiAgICBpZiAodV9pc0ludGVnZXIoYXJncykpIHtcbiAgICAgICAgYXJncyA9IHsgZHVyYXRpb246IGFyZ3MgfTtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IHVfZXh0ZW5kKGRlZmF1bHRzLCBhcmdzKTtcbiAgICBsZXQgZGlzcGxheVR5cGUgPSBvcHRpb25zLmRpc3BsYXk7XG4gICAgb3B0aW9ucy5kaXJlY3Rpb24gPSBkaXJlY3Rpb25zLkNMT1NFO1xuICAgIG9wdGlvbnMudG8gPSAwO1xuICAgIG9wdGlvbnMuc3RhcnRpbmdIZWlnaHQgPSBlbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICBvcHRpb25zLmRpc3RhbmNlSGVpZ2h0ID0gLW9wdGlvbnMuc3RhcnRpbmdIZWlnaHQ7XG4gICAgc2V0RWxlbWVudEFuaW1hdGlvblN0eWxlcyhlbGVtZW50LCBkaXNwbGF5VHlwZSk7XG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgodGltZXN0YW1wKSA9PiBhbmltYXRlKGVsZW1lbnQsIG9wdGlvbnMsIHRpbWVzdGFtcCkpO1xufTtcbmV4cG9ydCBjb25zdCB1X3NsaWRlRG93biA9IChlbGVtZW50LCBhcmdzID0ge30pID0+IHtcbiAgICBpZiAodV9pc0ludGVnZXIoYXJncykpIHtcbiAgICAgICAgYXJncyA9IHsgZHVyYXRpb246IGFyZ3MgfTtcbiAgICB9XG4gICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnMHB4JztcblxuICAgIGNvbnN0IG9wdGlvbnMgPSB1X2V4dGVuZChkZWZhdWx0cywgYXJncyk7XG4gICAgbGV0IGRpc3BsYXlUeXBlID0gb3B0aW9ucy5kaXNwbGF5O1xuICAgIHNldEVsZW1lbnRBbmltYXRpb25TdHlsZXMoZWxlbWVudCwgZGlzcGxheVR5cGUpO1xuICAgIG9wdGlvbnMuZGlyZWN0aW9uID0gZGlyZWN0aW9ucy5PUEVOO1xuICAgIG9wdGlvbnMudG8gPSBlbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICBvcHRpb25zLnN0YXJ0aW5nSGVpZ2h0ID0gMDtcbiAgICBvcHRpb25zLmRpc3RhbmNlSGVpZ2h0ID0gb3B0aW9ucy50bztcbiAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCh0aW1lc3RhbXApID0+IGFuaW1hdGUoZWxlbWVudCwgb3B0aW9ucywgdGltZXN0YW1wKSk7XG5cbn07XG5jb25zdCBhbmltYXRlID0gKGVsZW1lbnQsIG9wdGlvbnMsIG5vdykgPT4ge1xuICAgIGlmICghb3B0aW9ucy5zdGFydFRpbWUpIHtcbiAgICAgICAgb3B0aW9ucy5zdGFydFRpbWUgPSBub3c7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbm93IC0gb3B0aW9ucy5zdGFydFRpbWU7XG4gICAgbGV0IGFuaW1hdGlvbkNvbnRpbnVlID0gY3VycmVudFRpbWUgPCBvcHRpb25zLmR1cmF0aW9uO1xuICAgIGxldCBuZXdIZWlnaHQgPSBvcHRpb25zLmVhc2luZyhjdXJyZW50VGltZSwgb3B0aW9ucy5zdGFydGluZ0hlaWdodCwgb3B0aW9ucy5kaXN0YW5jZUhlaWdodCwgb3B0aW9ucy5kdXJhdGlvbik7XG4gICAgaWYgKGFuaW1hdGlvbkNvbnRpbnVlKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7bmV3SGVpZ2h0LnRvRml4ZWQoMil9cHhgO1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCh0aW1lc3RhbXApID0+IGFuaW1hdGUoZWxlbWVudCwgb3B0aW9ucywgdGltZXN0YW1wKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24gPT09IGRpcmVjdGlvbnMuQ0xPU0UpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24gPT09IGRpcmVjdGlvbnMuT1BFTikge1xuICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gb3B0aW9ucy5kaXNwbGF5ID09PSAnZmxleCcgPyAnZmxleCcgOiAnYmxvY2snO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZUVsZW1lbnRBbmltYXRpb25TdHlsZXMoZWxlbWVudCk7XG4gICAgfVxufTtcbmNvbnN0IHNldEVsZW1lbnRBbmltYXRpb25TdHlsZXMgPSAoZWxlbWVudCwgZGlzcGxheVR5cGUgPSAnYmxvY2snKSA9PiB7XG4gICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gZGlzcGxheVR5cGUgPT09ICdmbGV4JyA/ICdmbGV4JyA6ICdibG9jayc7XG4gICAgZWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgIGVsZW1lbnQuc3R5bGUubWFyZ2luVG9wID0gJzAnO1xuICAgIGVsZW1lbnQuc3R5bGUubWFyZ2luQm90dG9tID0gJzAnO1xuICAgIGVsZW1lbnQuc3R5bGUucGFkZGluZ1RvcCA9ICcwJztcbiAgICBlbGVtZW50LnN0eWxlLnBhZGRpbmdCb3R0b20gPSAnMCc7XG59O1xuY29uc3QgcmVtb3ZlRWxlbWVudEFuaW1hdGlvblN0eWxlcyA9IChlbGVtZW50KSA9PiB7XG4gICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBudWxsO1xuICAgIGVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSBudWxsO1xuICAgIGVsZW1lbnQuc3R5bGUubWFyZ2luVG9wID0gbnVsbDtcbiAgICBlbGVtZW50LnN0eWxlLm1hcmdpbkJvdHRvbSA9IG51bGw7XG4gICAgZWxlbWVudC5zdHlsZS5wYWRkaW5nVG9wID0gbnVsbDtcbiAgICBlbGVtZW50LnN0eWxlLnBhZGRpbmdCb3R0b20gPSBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHVfc2xpZGVUb2dnbGUgPSAoZWxlbWVudCwgYXJncyA9IHt9KSA9PiB7XG4gICAgaWYgKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmRpc3BsYXkgPT09ICdub25lJykge1xuICAgICAgICByZXR1cm4gdV9zbGlkZURvd24oZWxlbWVudCwgYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVfc2xpZGVVcChlbGVtZW50LCBhcmdzKTtcbiAgICB9XG59IiwiY29uc3QgdV9pc0ludGVnZXIgPSAodmFsdWUpID0+IHtcbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcikge1xuICAgICAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWx1ZSkgJiYgTWF0aC5mbG9vcih2YWx1ZSkgPT09IHZhbHVlO1xuICAgIH1cbn07XG5cbmNvbnN0IHVfaXNPYmplY3QgPSAobykgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICAgIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJlxuICAgICAgICBvICE9PSBudWxsICYmXG4gICAgICAgIG8uY29uc3RydWN0b3IgJiZcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKSA9PT0gJ09iamVjdCdcbiAgICApO1xufVxuXG5jb25zdCB1X3BhcnNlQm9vbCA9IChzdHIpID0+ICB7XG4gICAgLy8gY29uc29sZS5sb2codHlwZW9mIHN0cik7XG4gICAgLy8gc3RyaWN0OiBKU09OLnBhcnNlKHN0cilcblxuICAgIGlmKHN0ciA9PSBudWxsKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAodHlwZW9mIHN0ciA9PT0gJ2Jvb2xlYW4nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIChzdHIgPT09IHRydWUpO1xuICAgIH1cblxuICAgIGlmKHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgaWYoc3RyID09IFwiXCIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcbiAgICAgICAgaWYoc3RyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnIHx8IHN0ci50b0xvd2VyQ2FzZSgpID09ICd5ZXMnKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoLywvZywgJy4nKTtcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL15cXHMqXFwtXFxzKi9nLCAnLScpO1xuICAgIH1cblxuICAgIC8vIHZhciBpc051bSA9IHN0cmluZy5tYXRjaCgvXlswLTldKyQvKSAhPSBudWxsO1xuICAgIC8vIHZhciBpc051bSA9IC9eXFxkKyQvLnRlc3Qoc3RyKTtcbiAgICBpZighaXNOYU4oc3RyKSlcbiAgICAgICAgcmV0dXJuIChwYXJzZUZsb2F0KHN0cikgIT0gMCk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCB7XG4gICAgdV9pc0ludGVnZXIsXG4gICAgdV9pc09iamVjdCxcbiAgICB1X3BhcnNlQm9vbFxufSIsIlxuY29uc3QgdV9kZWJvdW5jZWQgPSAoZnVuYywgZGVsYXksIGltbWVkaWF0ZSkgPT4ge1xuICAgIGxldCB0aW1lcklkO1xuICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICBjb25zdCBib3VuZEZ1bmMgPSBmdW5jLmJpbmQodGhpcywgLi4uYXJncyk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgICAgaWYgKGltbWVkaWF0ZSAmJiAhdGltZXJJZCkge1xuICAgICAgICAgICAgYm91bmRGdW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FsbGVlRnVuYyA9IGltbWVkaWF0ZSA/ICgpID0+IHsgdGltZXJJZCA9IG51bGwgfSA6IGJvdW5kRnVuYztcbiAgICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQoY2FsbGVlRnVuYywgZGVsYXkpO1xuICAgIH1cbn1cblxuY29uc3QgdV90aHJvdHRsZWQgPSAoZnVuYywgZGVsYXksIGltbWVkaWF0ZSkgPT4ge1xuICAgIGxldCB0aW1lcklkO1xuICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICBjb25zdCBib3VuZEZ1bmMgPSBmdW5jLmJpbmQodGhpcywgLi4uYXJncyk7XG4gICAgICAgIGlmICh0aW1lcklkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGltbWVkaWF0ZSAmJiAhdGltZXJJZCkge1xuICAgICAgICAgICAgYm91bmRGdW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYoIWltbWVkaWF0ZSkge1xuICAgICAgICAgICAgICAgIGJvdW5kRnVuYygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGltZXJJZCA9IG51bGw7XG4gICAgICAgIH0sIGRlbGF5KTtcbiAgICB9XG59XG5cbmV4cG9ydCB7XG4gICAgdV9kZWJvdW5jZWQsXG4gICAgdV90aHJvdHRsZWRcbn07IiwiLy8gaW1wb3J0IFNjcm9sbE91dCBmcm9tIFwic2Nyb2xsLW91dFwiO1xuLy8gLy8gaW1wb3J0IFNwbGl0dGluZyBmcm9tIFwic3BsaXR0aW5nXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxBbmltYXRpb25zKCkge1xuXG4gICAgLy8gRnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBpbnRlcnNlY3Rpb24gZXZlbnRzXG4gICAgZnVuY3Rpb24gaGFuZGxlSW50ZXJzZWN0KGVudHJpZXMsIG9ic2VydmVyKSB7XG4gICAgICAgIGVudHJpZXMuZm9yRWFjaChlbnRyeSA9PiB7XG4gICAgICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgICAgICAgICBlbnRyeS50YXJnZXQuZGF0YXNldC5zY3JvbGwgPSAnaW4nO1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeS50YXJnZXQuZGF0YXNldC5vbmNlID09PSAndHJ1ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIudW5vYnNlcnZlKGVudHJ5LnRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbnRyeS50YXJnZXQuZGF0YXNldC5zY3JvbGwgPSAnb3V0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhbiBvYnNlcnZlciB3aXRoIHNwZWNpZmljIG9wdGlvbnNcbiAgICBmdW5jdGlvbiBjcmVhdGVPYnNlcnZlcihvcHRpb25zLCBzZWxlY3Rvciwgb25jZSkge1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihoYW5kbGVJbnRlcnNlY3QsIG9wdGlvbnMpO1xuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgZWxlbWVudC5kYXRhc2V0Lm9uY2UgPSBvbmNlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBPcHRpb25zIGZvciBkaWZmZXJlbnQgdGFyZ2V0c1xuICAgIGNvbnN0IG9wdGlvbnMxID0ge1xuICAgICAgICB0aHJlc2hvbGQ6IDAuMSxcbiAgICAgICAgcm9vdDogbnVsbCwgLy8gVXNlIHRoZSB2aWV3cG9ydCBhcyB0aGUgcm9vdFxuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25zMiA9IHtcbiAgICAgICAgcm9vdE1hcmdpbjogJzBweCAwcHggLTYwMHB4IDBweCcsIC8vIFRyaWdnZXIgNjAwcHggYmVmb3JlIGVsZW1lbnQgaXMgaW4gdmlld1xuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25zMyA9IHtcbiAgICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgICByb290OiBudWxsLFxuICAgIH07XG5cbiAgICAvLyBPYnNlcnZlcnMgZm9yIGRpZmZlcmVudCB0YXJnZXRzXG4gICAgY3JlYXRlT2JzZXJ2ZXIob3B0aW9uczEsIFwiLmluLXZpZXcsIC5hLWZhZGUtdHJhbnMsIC5zLXRleHQtYm94LCAucy1ibG9nLXNlY3Rpb24sIC5sLXNpZ24tdXAsIC5mb3JtLXNlY3Rpb25fX2lubmVyLCAucy1hbmFseXNpcywgLnMtc2VydmljZXMtY3VzdG9tLCAuc2VydmljZXMgLmwtZGNibCwgLnMtdGVhbSAuYmctdGV4dFwiLCB0cnVlKTtcbiAgICBjcmVhdGVPYnNlcnZlcihvcHRpb25zMiwgXCIuaW4tY3NcIiwgdHJ1ZSk7XG4gICAgY3JlYXRlT2JzZXJ2ZXIob3B0aW9uczMsIFwiLmluLXZpZXctclwiLCBmYWxzZSk7XG5cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiB2aWRlb0hvdmVyKCkge1xuXG4gICAgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdmlkcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3NlcnZpY2VzLW1lZGlhJyk7IC8vIExvb3Agb3ZlciB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgYW5kIGFkZCBldmVudCBsaXN0ZW5lcnNcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgdmlkc0l0ZW0gPSB2aWRzW2ldLnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvJyk7XG4gICAgICAgICAgICB2aWRzW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgdmlkc0l0ZW0ucGxheSgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZpZHNbaV0uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIHZpZHNJdGVtLnBhdXNlKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiIsIm1vZHVsZS5leHBvcnRzID0galF1ZXJ5OyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRpZiAoY2FjaGVkTW9kdWxlLmVycm9yICE9PSB1bmRlZmluZWQpIHRocm93IGNhY2hlZE1vZHVsZS5lcnJvcjtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0dHJ5IHtcblx0XHR2YXIgZXhlY09wdGlvbnMgPSB7IGlkOiBtb2R1bGVJZCwgbW9kdWxlOiBtb2R1bGUsIGZhY3Rvcnk6IF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLCByZXF1aXJlOiBfX3dlYnBhY2tfcmVxdWlyZV9fIH07XG5cdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pLmZvckVhY2goZnVuY3Rpb24oaGFuZGxlcikgeyBoYW5kbGVyKGV4ZWNPcHRpb25zKTsgfSk7XG5cdFx0bW9kdWxlID0gZXhlY09wdGlvbnMubW9kdWxlO1xuXHRcdGV4ZWNPcHRpb25zLmZhY3RvcnkuY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgZXhlY09wdGlvbnMucmVxdWlyZSk7XG5cdH0gY2F0Y2goZSkge1xuXHRcdG1vZHVsZS5lcnJvciA9IGU7XG5cdFx0dGhyb3cgZTtcblx0fVxuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuLy8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbl9fd2VicGFja19yZXF1aXJlX18ubSA9IF9fd2VicGFja19tb2R1bGVzX187XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX187XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlIGV4ZWN1dGlvbiBpbnRlcmNlcHRvclxuX193ZWJwYWNrX3JlcXVpcmVfXy5pID0gW107XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIGRlZmluaXRpb24pIHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiLy8gVGhpcyBmdW5jdGlvbiBhbGxvdyB0byByZWZlcmVuY2UgYWxsIGNodW5rc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5odSA9IGZ1bmN0aW9uKGNodW5rSWQpIHtcblx0Ly8gcmV0dXJuIHVybCBmb3IgZmlsZW5hbWVzIGJhc2VkIG9uIHRlbXBsYXRlXG5cdHJldHVybiBcIlwiICsgY2h1bmtJZCArIFwiLlwiICsgX193ZWJwYWNrX3JlcXVpcmVfXy5oKCkgKyBcIi5ob3QtdXBkYXRlLmpzXCI7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uaG1yRiA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gXCJhcHAuXCIgKyBfX3dlYnBhY2tfcmVxdWlyZV9fLmgoKSArIFwiLmhvdC11cGRhdGUuanNvblwiOyB9OyIsIl9fd2VicGFja19yZXF1aXJlX18uaCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gXCJiOWJiYzYzMDNmNzFmMjMyZmI3N1wiOyB9IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqLCBwcm9wKSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTsgfSIsInZhciBpblByb2dyZXNzID0ge307XG4vLyBkYXRhLXdlYnBhY2sgaXMgbm90IHVzZWQgYXMgYnVpbGQgaGFzIG5vIHVuaXF1ZU5hbWVcbi8vIGxvYWRTY3JpcHQgZnVuY3Rpb24gdG8gbG9hZCBhIHNjcmlwdCB2aWEgc2NyaXB0IHRhZ1xuX193ZWJwYWNrX3JlcXVpcmVfXy5sID0gZnVuY3Rpb24odXJsLCBkb25lLCBrZXksIGNodW5rSWQpIHtcblx0aWYoaW5Qcm9ncmVzc1t1cmxdKSB7IGluUHJvZ3Jlc3NbdXJsXS5wdXNoKGRvbmUpOyByZXR1cm47IH1cblx0dmFyIHNjcmlwdCwgbmVlZEF0dGFjaDtcblx0aWYoa2V5ICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgcyA9IHNjcmlwdHNbaV07XG5cdFx0XHRpZihzLmdldEF0dHJpYnV0ZShcInNyY1wiKSA9PSB1cmwpIHsgc2NyaXB0ID0gczsgYnJlYWs7IH1cblx0XHR9XG5cdH1cblx0aWYoIXNjcmlwdCkge1xuXHRcdG5lZWRBdHRhY2ggPSB0cnVlO1xuXHRcdHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuXG5cdFx0c2NyaXB0LmNoYXJzZXQgPSAndXRmLTgnO1xuXHRcdHNjcmlwdC50aW1lb3V0ID0gMTIwO1xuXHRcdGlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLm5jKSB7XG5cdFx0XHRzY3JpcHQuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgX193ZWJwYWNrX3JlcXVpcmVfXy5uYyk7XG5cdFx0fVxuXG5cblx0XHRzY3JpcHQuc3JjID0gdXJsO1xuXHR9XG5cdGluUHJvZ3Jlc3NbdXJsXSA9IFtkb25lXTtcblx0dmFyIG9uU2NyaXB0Q29tcGxldGUgPSBmdW5jdGlvbihwcmV2LCBldmVudCkge1xuXHRcdC8vIGF2b2lkIG1lbSBsZWFrcyBpbiBJRS5cblx0XHRzY3JpcHQub25lcnJvciA9IHNjcmlwdC5vbmxvYWQgPSBudWxsO1xuXHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHR2YXIgZG9uZUZucyA9IGluUHJvZ3Jlc3NbdXJsXTtcblx0XHRkZWxldGUgaW5Qcm9ncmVzc1t1cmxdO1xuXHRcdHNjcmlwdC5wYXJlbnROb2RlICYmIHNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG5cdFx0ZG9uZUZucyAmJiBkb25lRm5zLmZvckVhY2goZnVuY3Rpb24oZm4pIHsgcmV0dXJuIGZuKGV2ZW50KTsgfSk7XG5cdFx0aWYocHJldikgcmV0dXJuIHByZXYoZXZlbnQpO1xuXHR9XG5cdHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChvblNjcmlwdENvbXBsZXRlLmJpbmQobnVsbCwgdW5kZWZpbmVkLCB7IHR5cGU6ICd0aW1lb3V0JywgdGFyZ2V0OiBzY3JpcHQgfSksIDEyMDAwMCk7XG5cdHNjcmlwdC5vbmVycm9yID0gb25TY3JpcHRDb21wbGV0ZS5iaW5kKG51bGwsIHNjcmlwdC5vbmVycm9yKTtcblx0c2NyaXB0Lm9ubG9hZCA9IG9uU2NyaXB0Q29tcGxldGUuYmluZChudWxsLCBzY3JpcHQub25sb2FkKTtcblx0bmVlZEF0dGFjaCAmJiBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG59OyIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwidmFyIGN1cnJlbnRNb2R1bGVEYXRhID0ge307XG52YXIgaW5zdGFsbGVkTW9kdWxlcyA9IF9fd2VicGFja19yZXF1aXJlX18uYztcblxuLy8gbW9kdWxlIGFuZCByZXF1aXJlIGNyZWF0aW9uXG52YXIgY3VycmVudENoaWxkTW9kdWxlO1xudmFyIGN1cnJlbnRQYXJlbnRzID0gW107XG5cbi8vIHN0YXR1c1xudmFyIHJlZ2lzdGVyZWRTdGF0dXNIYW5kbGVycyA9IFtdO1xudmFyIGN1cnJlbnRTdGF0dXMgPSBcImlkbGVcIjtcblxuLy8gd2hpbGUgZG93bmxvYWRpbmdcbnZhciBibG9ja2luZ1Byb21pc2VzID0gMDtcbnZhciBibG9ja2luZ1Byb21pc2VzV2FpdGluZyA9IFtdO1xuXG4vLyBUaGUgdXBkYXRlIGluZm9cbnZhciBjdXJyZW50VXBkYXRlQXBwbHlIYW5kbGVycztcbnZhciBxdWV1ZWRJbnZhbGlkYXRlZE1vZHVsZXM7XG5cbl9fd2VicGFja19yZXF1aXJlX18uaG1yRCA9IGN1cnJlbnRNb2R1bGVEYXRhO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmkucHVzaChmdW5jdGlvbiAob3B0aW9ucykge1xuXHR2YXIgbW9kdWxlID0gb3B0aW9ucy5tb2R1bGU7XG5cdHZhciByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShvcHRpb25zLnJlcXVpcmUsIG9wdGlvbnMuaWQpO1xuXHRtb2R1bGUuaG90ID0gY3JlYXRlTW9kdWxlSG90T2JqZWN0KG9wdGlvbnMuaWQsIG1vZHVsZSk7XG5cdG1vZHVsZS5wYXJlbnRzID0gY3VycmVudFBhcmVudHM7XG5cdG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRjdXJyZW50UGFyZW50cyA9IFtdO1xuXHRvcHRpb25zLnJlcXVpcmUgPSByZXF1aXJlO1xufSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18uaG1yQyA9IHt9O1xuX193ZWJwYWNrX3JlcXVpcmVfXy5obXJJID0ge307XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlcXVpcmUocmVxdWlyZSwgbW9kdWxlSWQpIHtcblx0dmFyIG1lID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XG5cdGlmICghbWUpIHJldHVybiByZXF1aXJlO1xuXHR2YXIgZm4gPSBmdW5jdGlvbiAocmVxdWVzdCkge1xuXHRcdGlmIChtZS5ob3QuYWN0aXZlKSB7XG5cdFx0XHRpZiAoaW5zdGFsbGVkTW9kdWxlc1tyZXF1ZXN0XSkge1xuXHRcdFx0XHR2YXIgcGFyZW50cyA9IGluc3RhbGxlZE1vZHVsZXNbcmVxdWVzdF0ucGFyZW50cztcblx0XHRcdFx0aWYgKHBhcmVudHMuaW5kZXhPZihtb2R1bGVJZCkgPT09IC0xKSB7XG5cdFx0XHRcdFx0cGFyZW50cy5wdXNoKG1vZHVsZUlkKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3VycmVudFBhcmVudHMgPSBbbW9kdWxlSWRdO1xuXHRcdFx0XHRjdXJyZW50Q2hpbGRNb2R1bGUgPSByZXF1ZXN0O1xuXHRcdFx0fVxuXHRcdFx0aWYgKG1lLmNoaWxkcmVuLmluZGV4T2YocmVxdWVzdCkgPT09IC0xKSB7XG5cdFx0XHRcdG1lLmNoaWxkcmVuLnB1c2gocmVxdWVzdCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnNvbGUud2Fybihcblx0XHRcdFx0XCJbSE1SXSB1bmV4cGVjdGVkIHJlcXVpcmUoXCIgK1xuXHRcdFx0XHRcdHJlcXVlc3QgK1xuXHRcdFx0XHRcdFwiKSBmcm9tIGRpc3Bvc2VkIG1vZHVsZSBcIiArXG5cdFx0XHRcdFx0bW9kdWxlSWRcblx0XHRcdCk7XG5cdFx0XHRjdXJyZW50UGFyZW50cyA9IFtdO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVxdWlyZShyZXF1ZXN0KTtcblx0fTtcblx0dmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIHJlcXVpcmVbbmFtZV07XG5cdFx0XHR9LFxuXHRcdFx0c2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0cmVxdWlyZVtuYW1lXSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH07XG5cdH07XG5cdGZvciAodmFyIG5hbWUgaW4gcmVxdWlyZSkge1xuXHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVxdWlyZSwgbmFtZSkgJiYgbmFtZSAhPT0gXCJlXCIpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgbmFtZSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKG5hbWUpKTtcblx0XHR9XG5cdH1cblx0Zm4uZSA9IGZ1bmN0aW9uIChjaHVua0lkLCBmZXRjaFByaW9yaXR5KSB7XG5cdFx0cmV0dXJuIHRyYWNrQmxvY2tpbmdQcm9taXNlKHJlcXVpcmUuZShjaHVua0lkLCBmZXRjaFByaW9yaXR5KSk7XG5cdH07XG5cdHJldHVybiBmbjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTW9kdWxlSG90T2JqZWN0KG1vZHVsZUlkLCBtZSkge1xuXHR2YXIgX21haW4gPSBjdXJyZW50Q2hpbGRNb2R1bGUgIT09IG1vZHVsZUlkO1xuXHR2YXIgaG90ID0ge1xuXHRcdC8vIHByaXZhdGUgc3R1ZmZcblx0XHRfYWNjZXB0ZWREZXBlbmRlbmNpZXM6IHt9LFxuXHRcdF9hY2NlcHRlZEVycm9ySGFuZGxlcnM6IHt9LFxuXHRcdF9kZWNsaW5lZERlcGVuZGVuY2llczoge30sXG5cdFx0X3NlbGZBY2NlcHRlZDogZmFsc2UsXG5cdFx0X3NlbGZEZWNsaW5lZDogZmFsc2UsXG5cdFx0X3NlbGZJbnZhbGlkYXRlZDogZmFsc2UsXG5cdFx0X2Rpc3Bvc2VIYW5kbGVyczogW10sXG5cdFx0X21haW46IF9tYWluLFxuXHRcdF9yZXF1aXJlU2VsZjogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y3VycmVudFBhcmVudHMgPSBtZS5wYXJlbnRzLnNsaWNlKCk7XG5cdFx0XHRjdXJyZW50Q2hpbGRNb2R1bGUgPSBfbWFpbiA/IHVuZGVmaW5lZCA6IG1vZHVsZUlkO1xuXHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCk7XG5cdFx0fSxcblxuXHRcdC8vIE1vZHVsZSBBUElcblx0XHRhY3RpdmU6IHRydWUsXG5cdFx0YWNjZXB0OiBmdW5jdGlvbiAoZGVwLCBjYWxsYmFjaywgZXJyb3JIYW5kbGVyKSB7XG5cdFx0XHRpZiAoZGVwID09PSB1bmRlZmluZWQpIGhvdC5fc2VsZkFjY2VwdGVkID0gdHJ1ZTtcblx0XHRcdGVsc2UgaWYgKHR5cGVvZiBkZXAgPT09IFwiZnVuY3Rpb25cIikgaG90Ll9zZWxmQWNjZXB0ZWQgPSBkZXA7XG5cdFx0XHRlbHNlIGlmICh0eXBlb2YgZGVwID09PSBcIm9iamVjdFwiICYmIGRlcCAhPT0gbnVsbCkge1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGRlcC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbZGVwW2ldXSA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuXHRcdFx0XHRcdGhvdC5fYWNjZXB0ZWRFcnJvckhhbmRsZXJzW2RlcFtpXV0gPSBlcnJvckhhbmRsZXI7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbZGVwXSA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuXHRcdFx0XHRob3QuX2FjY2VwdGVkRXJyb3JIYW5kbGVyc1tkZXBdID0gZXJyb3JIYW5kbGVyO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0ZGVjbGluZTogZnVuY3Rpb24gKGRlcCkge1xuXHRcdFx0aWYgKGRlcCA9PT0gdW5kZWZpbmVkKSBob3QuX3NlbGZEZWNsaW5lZCA9IHRydWU7XG5cdFx0XHRlbHNlIGlmICh0eXBlb2YgZGVwID09PSBcIm9iamVjdFwiICYmIGRlcCAhPT0gbnVsbClcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkZXAubGVuZ3RoOyBpKyspXG5cdFx0XHRcdFx0aG90Ll9kZWNsaW5lZERlcGVuZGVuY2llc1tkZXBbaV1dID0gdHJ1ZTtcblx0XHRcdGVsc2UgaG90Ll9kZWNsaW5lZERlcGVuZGVuY2llc1tkZXBdID0gdHJ1ZTtcblx0XHR9LFxuXHRcdGRpc3Bvc2U6IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHRcdFx0aG90Ll9kaXNwb3NlSGFuZGxlcnMucHVzaChjYWxsYmFjayk7XG5cdFx0fSxcblx0XHRhZGREaXNwb3NlSGFuZGxlcjogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdFx0XHRob3QuX2Rpc3Bvc2VIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTtcblx0XHR9LFxuXHRcdHJlbW92ZURpc3Bvc2VIYW5kbGVyOiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0XHRcdHZhciBpZHggPSBob3QuX2Rpc3Bvc2VIYW5kbGVycy5pbmRleE9mKGNhbGxiYWNrKTtcblx0XHRcdGlmIChpZHggPj0gMCkgaG90Ll9kaXNwb3NlSGFuZGxlcnMuc3BsaWNlKGlkeCwgMSk7XG5cdFx0fSxcblx0XHRpbnZhbGlkYXRlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHR0aGlzLl9zZWxmSW52YWxpZGF0ZWQgPSB0cnVlO1xuXHRcdFx0c3dpdGNoIChjdXJyZW50U3RhdHVzKSB7XG5cdFx0XHRcdGNhc2UgXCJpZGxlXCI6XG5cdFx0XHRcdFx0Y3VycmVudFVwZGF0ZUFwcGx5SGFuZGxlcnMgPSBbXTtcblx0XHRcdFx0XHRPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLmhtckkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5obXJJW2tleV0oXG5cdFx0XHRcdFx0XHRcdG1vZHVsZUlkLFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50VXBkYXRlQXBwbHlIYW5kbGVyc1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRzZXRTdGF0dXMoXCJyZWFkeVwiKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcInJlYWR5XCI6XG5cdFx0XHRcdFx0T2JqZWN0LmtleXMoX193ZWJwYWNrX3JlcXVpcmVfXy5obXJJKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18uaG1ySVtrZXldKFxuXHRcdFx0XHRcdFx0XHRtb2R1bGVJZCxcblx0XHRcdFx0XHRcdFx0Y3VycmVudFVwZGF0ZUFwcGx5SGFuZGxlcnNcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJwcmVwYXJlXCI6XG5cdFx0XHRcdGNhc2UgXCJjaGVja1wiOlxuXHRcdFx0XHRjYXNlIFwiZGlzcG9zZVwiOlxuXHRcdFx0XHRjYXNlIFwiYXBwbHlcIjpcblx0XHRcdFx0XHQocXVldWVkSW52YWxpZGF0ZWRNb2R1bGVzID0gcXVldWVkSW52YWxpZGF0ZWRNb2R1bGVzIHx8IFtdKS5wdXNoKFxuXHRcdFx0XHRcdFx0bW9kdWxlSWRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdC8vIGlnbm9yZSByZXF1ZXN0cyBpbiBlcnJvciBzdGF0ZXNcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gTWFuYWdlbWVudCBBUElcblx0XHRjaGVjazogaG90Q2hlY2ssXG5cdFx0YXBwbHk6IGhvdEFwcGx5LFxuXHRcdHN0YXR1czogZnVuY3Rpb24gKGwpIHtcblx0XHRcdGlmICghbCkgcmV0dXJuIGN1cnJlbnRTdGF0dXM7XG5cdFx0XHRyZWdpc3RlcmVkU3RhdHVzSGFuZGxlcnMucHVzaChsKTtcblx0XHR9LFxuXHRcdGFkZFN0YXR1c0hhbmRsZXI6IGZ1bmN0aW9uIChsKSB7XG5cdFx0XHRyZWdpc3RlcmVkU3RhdHVzSGFuZGxlcnMucHVzaChsKTtcblx0XHR9LFxuXHRcdHJlbW92ZVN0YXR1c0hhbmRsZXI6IGZ1bmN0aW9uIChsKSB7XG5cdFx0XHR2YXIgaWR4ID0gcmVnaXN0ZXJlZFN0YXR1c0hhbmRsZXJzLmluZGV4T2YobCk7XG5cdFx0XHRpZiAoaWR4ID49IDApIHJlZ2lzdGVyZWRTdGF0dXNIYW5kbGVycy5zcGxpY2UoaWR4LCAxKTtcblx0XHR9LFxuXG5cdFx0Ly9pbmhlcml0IGZyb20gcHJldmlvdXMgZGlzcG9zZSBjYWxsXG5cdFx0ZGF0YTogY3VycmVudE1vZHVsZURhdGFbbW9kdWxlSWRdXG5cdH07XG5cdGN1cnJlbnRDaGlsZE1vZHVsZSA9IHVuZGVmaW5lZDtcblx0cmV0dXJuIGhvdDtcbn1cblxuZnVuY3Rpb24gc2V0U3RhdHVzKG5ld1N0YXR1cykge1xuXHRjdXJyZW50U3RhdHVzID0gbmV3U3RhdHVzO1xuXHR2YXIgcmVzdWx0cyA9IFtdO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcmVnaXN0ZXJlZFN0YXR1c0hhbmRsZXJzLmxlbmd0aDsgaSsrKVxuXHRcdHJlc3VsdHNbaV0gPSByZWdpc3RlcmVkU3RhdHVzSGFuZGxlcnNbaV0uY2FsbChudWxsLCBuZXdTdGF0dXMpO1xuXG5cdHJldHVybiBQcm9taXNlLmFsbChyZXN1bHRzKS50aGVuKGZ1bmN0aW9uICgpIHt9KTtcbn1cblxuZnVuY3Rpb24gdW5ibG9jaygpIHtcblx0aWYgKC0tYmxvY2tpbmdQcm9taXNlcyA9PT0gMCkge1xuXHRcdHNldFN0YXR1cyhcInJlYWR5XCIpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKGJsb2NraW5nUHJvbWlzZXMgPT09IDApIHtcblx0XHRcdFx0dmFyIGxpc3QgPSBibG9ja2luZ1Byb21pc2VzV2FpdGluZztcblx0XHRcdFx0YmxvY2tpbmdQcm9taXNlc1dhaXRpbmcgPSBbXTtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0bGlzdFtpXSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdHJhY2tCbG9ja2luZ1Byb21pc2UocHJvbWlzZSkge1xuXHRzd2l0Y2ggKGN1cnJlbnRTdGF0dXMpIHtcblx0XHRjYXNlIFwicmVhZHlcIjpcblx0XHRcdHNldFN0YXR1cyhcInByZXBhcmVcIik7XG5cdFx0LyogZmFsbHRocm91Z2ggKi9cblx0XHRjYXNlIFwicHJlcGFyZVwiOlxuXHRcdFx0YmxvY2tpbmdQcm9taXNlcysrO1xuXHRcdFx0cHJvbWlzZS50aGVuKHVuYmxvY2ssIHVuYmxvY2spO1xuXHRcdFx0cmV0dXJuIHByb21pc2U7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBwcm9taXNlO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHdhaXRGb3JCbG9ja2luZ1Byb21pc2VzKGZuKSB7XG5cdGlmIChibG9ja2luZ1Byb21pc2VzID09PSAwKSByZXR1cm4gZm4oKTtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdFx0YmxvY2tpbmdQcm9taXNlc1dhaXRpbmcucHVzaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXNvbHZlKGZuKCkpO1xuXHRcdH0pO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gaG90Q2hlY2soYXBwbHlPblVwZGF0ZSkge1xuXHRpZiAoY3VycmVudFN0YXR1cyAhPT0gXCJpZGxlXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJjaGVjaygpIGlzIG9ubHkgYWxsb3dlZCBpbiBpZGxlIHN0YXR1c1wiKTtcblx0fVxuXHRyZXR1cm4gc2V0U3RhdHVzKFwiY2hlY2tcIilcblx0XHQudGhlbihfX3dlYnBhY2tfcmVxdWlyZV9fLmhtck0pXG5cdFx0LnRoZW4oZnVuY3Rpb24gKHVwZGF0ZSkge1xuXHRcdFx0aWYgKCF1cGRhdGUpIHtcblx0XHRcdFx0cmV0dXJuIHNldFN0YXR1cyhhcHBseUludmFsaWRhdGVkTW9kdWxlcygpID8gXCJyZWFkeVwiIDogXCJpZGxlXCIpLnRoZW4oXG5cdFx0XHRcdFx0ZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2V0U3RhdHVzKFwicHJlcGFyZVwiKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dmFyIHVwZGF0ZWRNb2R1bGVzID0gW107XG5cdFx0XHRcdGN1cnJlbnRVcGRhdGVBcHBseUhhbmRsZXJzID0gW107XG5cblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdE9iamVjdC5rZXlzKF9fd2VicGFja19yZXF1aXJlX18uaG1yQykucmVkdWNlKGZ1bmN0aW9uIChcblx0XHRcdFx0XHRcdHByb21pc2VzLFxuXHRcdFx0XHRcdFx0a2V5XG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmhtckNba2V5XShcblx0XHRcdFx0XHRcdFx0dXBkYXRlLmMsXG5cdFx0XHRcdFx0XHRcdHVwZGF0ZS5yLFxuXHRcdFx0XHRcdFx0XHR1cGRhdGUubSxcblx0XHRcdFx0XHRcdFx0cHJvbWlzZXMsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVBcHBseUhhbmRsZXJzLFxuXHRcdFx0XHRcdFx0XHR1cGRhdGVkTW9kdWxlc1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJldHVybiBwcm9taXNlcztcblx0XHRcdFx0XHR9LCBbXSlcblx0XHRcdFx0KS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXR1cm4gd2FpdEZvckJsb2NraW5nUHJvbWlzZXMoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0aWYgKGFwcGx5T25VcGRhdGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGludGVybmFsQXBwbHkoYXBwbHlPblVwZGF0ZSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc2V0U3RhdHVzKFwicmVhZHlcIikudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHVwZGF0ZWRNb2R1bGVzO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcbn1cblxuZnVuY3Rpb24gaG90QXBwbHkob3B0aW9ucykge1xuXHRpZiAoY3VycmVudFN0YXR1cyAhPT0gXCJyZWFkeVwiKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcImFwcGx5KCkgaXMgb25seSBhbGxvd2VkIGluIHJlYWR5IHN0YXR1cyAoc3RhdGU6IFwiICtcblx0XHRcdFx0XHRjdXJyZW50U3RhdHVzICtcblx0XHRcdFx0XHRcIilcIlxuXHRcdFx0KTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gaW50ZXJuYWxBcHBseShvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gaW50ZXJuYWxBcHBseShvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdGFwcGx5SW52YWxpZGF0ZWRNb2R1bGVzKCk7XG5cblx0dmFyIHJlc3VsdHMgPSBjdXJyZW50VXBkYXRlQXBwbHlIYW5kbGVycy5tYXAoZnVuY3Rpb24gKGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gaGFuZGxlcihvcHRpb25zKTtcblx0fSk7XG5cdGN1cnJlbnRVcGRhdGVBcHBseUhhbmRsZXJzID0gdW5kZWZpbmVkO1xuXG5cdHZhciBlcnJvcnMgPSByZXN1bHRzXG5cdFx0Lm1hcChmdW5jdGlvbiAocikge1xuXHRcdFx0cmV0dXJuIHIuZXJyb3I7XG5cdFx0fSlcblx0XHQuZmlsdGVyKEJvb2xlYW4pO1xuXG5cdGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBzZXRTdGF0dXMoXCJhYm9ydFwiKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdHRocm93IGVycm9yc1swXTtcblx0XHR9KTtcblx0fVxuXG5cdC8vIE5vdyBpbiBcImRpc3Bvc2VcIiBwaGFzZVxuXHR2YXIgZGlzcG9zZVByb21pc2UgPSBzZXRTdGF0dXMoXCJkaXNwb3NlXCIpO1xuXG5cdHJlc3VsdHMuZm9yRWFjaChmdW5jdGlvbiAocmVzdWx0KSB7XG5cdFx0aWYgKHJlc3VsdC5kaXNwb3NlKSByZXN1bHQuZGlzcG9zZSgpO1xuXHR9KTtcblxuXHQvLyBOb3cgaW4gXCJhcHBseVwiIHBoYXNlXG5cdHZhciBhcHBseVByb21pc2UgPSBzZXRTdGF0dXMoXCJhcHBseVwiKTtcblxuXHR2YXIgZXJyb3I7XG5cdHZhciByZXBvcnRFcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcblx0XHRpZiAoIWVycm9yKSBlcnJvciA9IGVycjtcblx0fTtcblxuXHR2YXIgb3V0ZGF0ZWRNb2R1bGVzID0gW107XG5cdHJlc3VsdHMuZm9yRWFjaChmdW5jdGlvbiAocmVzdWx0KSB7XG5cdFx0aWYgKHJlc3VsdC5hcHBseSkge1xuXHRcdFx0dmFyIG1vZHVsZXMgPSByZXN1bHQuYXBwbHkocmVwb3J0RXJyb3IpO1xuXHRcdFx0aWYgKG1vZHVsZXMpIHtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0b3V0ZGF0ZWRNb2R1bGVzLnB1c2gobW9kdWxlc1tpXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBQcm9taXNlLmFsbChbZGlzcG9zZVByb21pc2UsIGFwcGx5UHJvbWlzZV0pLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdC8vIGhhbmRsZSBlcnJvcnMgaW4gYWNjZXB0IGhhbmRsZXJzIGFuZCBzZWxmIGFjY2VwdGVkIG1vZHVsZSBsb2FkXG5cdFx0aWYgKGVycm9yKSB7XG5cdFx0XHRyZXR1cm4gc2V0U3RhdHVzKFwiZmFpbFwiKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAocXVldWVkSW52YWxpZGF0ZWRNb2R1bGVzKSB7XG5cdFx0XHRyZXR1cm4gaW50ZXJuYWxBcHBseShvcHRpb25zKS50aGVuKGZ1bmN0aW9uIChsaXN0KSB7XG5cdFx0XHRcdG91dGRhdGVkTW9kdWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGVJZCkge1xuXHRcdFx0XHRcdGlmIChsaXN0LmluZGV4T2YobW9kdWxlSWQpIDwgMCkgbGlzdC5wdXNoKG1vZHVsZUlkKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBsaXN0O1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNldFN0YXR1cyhcImlkbGVcIikudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gb3V0ZGF0ZWRNb2R1bGVzO1xuXHRcdH0pO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gYXBwbHlJbnZhbGlkYXRlZE1vZHVsZXMoKSB7XG5cdGlmIChxdWV1ZWRJbnZhbGlkYXRlZE1vZHVsZXMpIHtcblx0XHRpZiAoIWN1cnJlbnRVcGRhdGVBcHBseUhhbmRsZXJzKSBjdXJyZW50VXBkYXRlQXBwbHlIYW5kbGVycyA9IFtdO1xuXHRcdE9iamVjdC5rZXlzKF9fd2VicGFja19yZXF1aXJlX18uaG1ySSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRxdWV1ZWRJbnZhbGlkYXRlZE1vZHVsZXMuZm9yRWFjaChmdW5jdGlvbiAobW9kdWxlSWQpIHtcblx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5obXJJW2tleV0oXG5cdFx0XHRcdFx0bW9kdWxlSWQsXG5cdFx0XHRcdFx0Y3VycmVudFVwZGF0ZUFwcGx5SGFuZGxlcnNcblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHF1ZXVlZEludmFsaWRhdGVkTW9kdWxlcyA9IHVuZGVmaW5lZDtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufSIsIl9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiaHR0cHM6Ly9kaWdpdGFsc2lsa25ldzo4ODg4L3dwLWNvbnRlbnQvdGhlbWVzL2RpZ2l0YWxzaWxrL2Fzc2V0cy9qcy9cIjsiLCIvLyBubyBiYXNlVVJJXG5cbi8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgYW5kIGxvYWRpbmcgY2h1bmtzXG4vLyB1bmRlZmluZWQgPSBjaHVuayBub3QgbG9hZGVkLCBudWxsID0gY2h1bmsgcHJlbG9hZGVkL3ByZWZldGNoZWRcbi8vIFtyZXNvbHZlLCByZWplY3QsIFByb21pc2VdID0gY2h1bmsgbG9hZGluZywgMCA9IGNodW5rIGxvYWRlZFxudmFyIGluc3RhbGxlZENodW5rcyA9IF9fd2VicGFja19yZXF1aXJlX18uaG1yU19qc29ucCA9IF9fd2VicGFja19yZXF1aXJlX18uaG1yU19qc29ucCB8fCB7XG5cdFwiYXBwXCI6IDBcbn07XG5cbi8vIG5vIGNodW5rIG9uIGRlbWFuZCBsb2FkaW5nXG5cbi8vIG5vIHByZWZldGNoaW5nXG5cbi8vIG5vIHByZWxvYWRlZFxuXG52YXIgY3VycmVudFVwZGF0ZWRNb2R1bGVzTGlzdDtcbnZhciB3YWl0aW5nVXBkYXRlUmVzb2x2ZXMgPSB7fTtcbmZ1bmN0aW9uIGxvYWRVcGRhdGVDaHVuayhjaHVua0lkLCB1cGRhdGVkTW9kdWxlc0xpc3QpIHtcblx0Y3VycmVudFVwZGF0ZWRNb2R1bGVzTGlzdCA9IHVwZGF0ZWRNb2R1bGVzTGlzdDtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdHdhaXRpbmdVcGRhdGVSZXNvbHZlc1tjaHVua0lkXSA9IHJlc29sdmU7XG5cdFx0Ly8gc3RhcnQgdXBkYXRlIGNodW5rIGxvYWRpbmdcblx0XHR2YXIgdXJsID0gX193ZWJwYWNrX3JlcXVpcmVfXy5wICsgX193ZWJwYWNrX3JlcXVpcmVfXy5odShjaHVua0lkKTtcblx0XHQvLyBjcmVhdGUgZXJyb3IgYmVmb3JlIHN0YWNrIHVud291bmQgdG8gZ2V0IHVzZWZ1bCBzdGFja3RyYWNlIGxhdGVyXG5cdFx0dmFyIGVycm9yID0gbmV3IEVycm9yKCk7XG5cdFx0dmFyIGxvYWRpbmdFbmRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHRpZih3YWl0aW5nVXBkYXRlUmVzb2x2ZXNbY2h1bmtJZF0pIHtcblx0XHRcdFx0d2FpdGluZ1VwZGF0ZVJlc29sdmVzW2NodW5rSWRdID0gdW5kZWZpbmVkXG5cdFx0XHRcdHZhciBlcnJvclR5cGUgPSBldmVudCAmJiAoZXZlbnQudHlwZSA9PT0gJ2xvYWQnID8gJ21pc3NpbmcnIDogZXZlbnQudHlwZSk7XG5cdFx0XHRcdHZhciByZWFsU3JjID0gZXZlbnQgJiYgZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5zcmM7XG5cdFx0XHRcdGVycm9yLm1lc3NhZ2UgPSAnTG9hZGluZyBob3QgdXBkYXRlIGNodW5rICcgKyBjaHVua0lkICsgJyBmYWlsZWQuXFxuKCcgKyBlcnJvclR5cGUgKyAnOiAnICsgcmVhbFNyYyArICcpJztcblx0XHRcdFx0ZXJyb3IubmFtZSA9ICdDaHVua0xvYWRFcnJvcic7XG5cdFx0XHRcdGVycm9yLnR5cGUgPSBlcnJvclR5cGU7XG5cdFx0XHRcdGVycm9yLnJlcXVlc3QgPSByZWFsU3JjO1xuXHRcdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5sKHVybCwgbG9hZGluZ0VuZGVkKTtcblx0fSk7XG59XG5cbnNlbGZbXCJ3ZWJwYWNrSG90VXBkYXRlXCJdID0gZnVuY3Rpb24oY2h1bmtJZCwgbW9yZU1vZHVsZXMsIHJ1bnRpbWUpIHtcblx0Zm9yKHZhciBtb2R1bGVJZCBpbiBtb3JlTW9kdWxlcykge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhtb3JlTW9kdWxlcywgbW9kdWxlSWQpKSB7XG5cdFx0XHRjdXJyZW50VXBkYXRlW21vZHVsZUlkXSA9IG1vcmVNb2R1bGVzW21vZHVsZUlkXTtcblx0XHRcdGlmKGN1cnJlbnRVcGRhdGVkTW9kdWxlc0xpc3QpIGN1cnJlbnRVcGRhdGVkTW9kdWxlc0xpc3QucHVzaChtb2R1bGVJZCk7XG5cdFx0fVxuXHR9XG5cdGlmKHJ1bnRpbWUpIGN1cnJlbnRVcGRhdGVSdW50aW1lLnB1c2gocnVudGltZSk7XG5cdGlmKHdhaXRpbmdVcGRhdGVSZXNvbHZlc1tjaHVua0lkXSkge1xuXHRcdHdhaXRpbmdVcGRhdGVSZXNvbHZlc1tjaHVua0lkXSgpO1xuXHRcdHdhaXRpbmdVcGRhdGVSZXNvbHZlc1tjaHVua0lkXSA9IHVuZGVmaW5lZDtcblx0fVxufTtcblxudmFyIGN1cnJlbnRVcGRhdGVDaHVua3M7XG52YXIgY3VycmVudFVwZGF0ZTtcbnZhciBjdXJyZW50VXBkYXRlUmVtb3ZlZENodW5rcztcbnZhciBjdXJyZW50VXBkYXRlUnVudGltZTtcbmZ1bmN0aW9uIGFwcGx5SGFuZGxlcihvcHRpb25zKSB7XG5cdGlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLmYpIGRlbGV0ZSBfX3dlYnBhY2tfcmVxdWlyZV9fLmYuanNvbnBIbXI7XG5cdGN1cnJlbnRVcGRhdGVDaHVua3MgPSB1bmRlZmluZWQ7XG5cdGZ1bmN0aW9uIGdldEFmZmVjdGVkTW9kdWxlRWZmZWN0cyh1cGRhdGVNb2R1bGVJZCkge1xuXHRcdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbdXBkYXRlTW9kdWxlSWRdO1xuXHRcdHZhciBvdXRkYXRlZERlcGVuZGVuY2llcyA9IHt9O1xuXG5cdFx0dmFyIHF1ZXVlID0gb3V0ZGF0ZWRNb2R1bGVzLm1hcChmdW5jdGlvbiAoaWQpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGNoYWluOiBbaWRdLFxuXHRcdFx0XHRpZDogaWRcblx0XHRcdH07XG5cdFx0fSk7XG5cdFx0d2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcblx0XHRcdHZhciBxdWV1ZUl0ZW0gPSBxdWV1ZS5wb3AoKTtcblx0XHRcdHZhciBtb2R1bGVJZCA9IHF1ZXVlSXRlbS5pZDtcblx0XHRcdHZhciBjaGFpbiA9IHF1ZXVlSXRlbS5jaGFpbjtcblx0XHRcdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbbW9kdWxlSWRdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQhbW9kdWxlIHx8XG5cdFx0XHRcdChtb2R1bGUuaG90Ll9zZWxmQWNjZXB0ZWQgJiYgIW1vZHVsZS5ob3QuX3NlbGZJbnZhbGlkYXRlZClcblx0XHRcdClcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRpZiAobW9kdWxlLmhvdC5fc2VsZkRlY2xpbmVkKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0dHlwZTogXCJzZWxmLWRlY2xpbmVkXCIsXG5cdFx0XHRcdFx0Y2hhaW46IGNoYWluLFxuXHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKG1vZHVsZS5ob3QuX21haW4pIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHR0eXBlOiBcInVuYWNjZXB0ZWRcIixcblx0XHRcdFx0XHRjaGFpbjogY2hhaW4sXG5cdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG1vZHVsZS5wYXJlbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhciBwYXJlbnRJZCA9IG1vZHVsZS5wYXJlbnRzW2ldO1xuXHRcdFx0XHR2YXIgcGFyZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5jW3BhcmVudElkXTtcblx0XHRcdFx0aWYgKCFwYXJlbnQpIGNvbnRpbnVlO1xuXHRcdFx0XHRpZiAocGFyZW50LmhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdHR5cGU6IFwiZGVjbGluZWRcIixcblx0XHRcdFx0XHRcdGNoYWluOiBjaGFpbi5jb25jYXQoW3BhcmVudElkXSksXG5cdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXG5cdFx0XHRcdFx0XHRwYXJlbnRJZDogcGFyZW50SWRcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvdXRkYXRlZE1vZHVsZXMuaW5kZXhPZihwYXJlbnRJZCkgIT09IC0xKSBjb250aW51ZTtcblx0XHRcdFx0aWYgKHBhcmVudC5ob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSkge1xuXHRcdFx0XHRcdGlmICghb3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdKVxuXHRcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdID0gW107XG5cdFx0XHRcdFx0YWRkQWxsVG9TZXQob3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdLCBbbW9kdWxlSWRdKTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkZWxldGUgb3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdO1xuXHRcdFx0XHRvdXRkYXRlZE1vZHVsZXMucHVzaChwYXJlbnRJZCk7XG5cdFx0XHRcdHF1ZXVlLnB1c2goe1xuXHRcdFx0XHRcdGNoYWluOiBjaGFpbi5jb25jYXQoW3BhcmVudElkXSksXG5cdFx0XHRcdFx0aWQ6IHBhcmVudElkXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiBcImFjY2VwdGVkXCIsXG5cdFx0XHRtb2R1bGVJZDogdXBkYXRlTW9kdWxlSWQsXG5cdFx0XHRvdXRkYXRlZE1vZHVsZXM6IG91dGRhdGVkTW9kdWxlcyxcblx0XHRcdG91dGRhdGVkRGVwZW5kZW5jaWVzOiBvdXRkYXRlZERlcGVuZGVuY2llc1xuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRBbGxUb1NldChhLCBiKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IGJbaV07XG5cdFx0XHRpZiAoYS5pbmRleE9mKGl0ZW0pID09PSAtMSkgYS5wdXNoKGl0ZW0pO1xuXHRcdH1cblx0fVxuXG5cdC8vIGF0IGJlZ2luIGFsbCB1cGRhdGVzIG1vZHVsZXMgYXJlIG91dGRhdGVkXG5cdC8vIHRoZSBcIm91dGRhdGVkXCIgc3RhdHVzIGNhbiBwcm9wYWdhdGUgdG8gcGFyZW50cyBpZiB0aGV5IGRvbid0IGFjY2VwdCB0aGUgY2hpbGRyZW5cblx0dmFyIG91dGRhdGVkRGVwZW5kZW5jaWVzID0ge307XG5cdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbXTtcblx0dmFyIGFwcGxpZWRVcGRhdGUgPSB7fTtcblxuXHR2YXIgd2FyblVuZXhwZWN0ZWRSZXF1aXJlID0gZnVuY3Rpb24gd2FyblVuZXhwZWN0ZWRSZXF1aXJlKG1vZHVsZSkge1xuXHRcdGNvbnNvbGUud2Fybihcblx0XHRcdFwiW0hNUl0gdW5leHBlY3RlZCByZXF1aXJlKFwiICsgbW9kdWxlLmlkICsgXCIpIHRvIGRpc3Bvc2VkIG1vZHVsZVwiXG5cdFx0KTtcblx0fTtcblxuXHRmb3IgKHZhciBtb2R1bGVJZCBpbiBjdXJyZW50VXBkYXRlKSB7XG5cdFx0aWYgKF9fd2VicGFja19yZXF1aXJlX18ubyhjdXJyZW50VXBkYXRlLCBtb2R1bGVJZCkpIHtcblx0XHRcdHZhciBuZXdNb2R1bGVGYWN0b3J5ID0gY3VycmVudFVwZGF0ZVttb2R1bGVJZF07XG5cdFx0XHQvKiogQHR5cGUge1RPRE99ICovXG5cdFx0XHR2YXIgcmVzdWx0O1xuXHRcdFx0aWYgKG5ld01vZHVsZUZhY3RvcnkpIHtcblx0XHRcdFx0cmVzdWx0ID0gZ2V0QWZmZWN0ZWRNb2R1bGVFZmZlY3RzKG1vZHVsZUlkKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdCA9IHtcblx0XHRcdFx0XHR0eXBlOiBcImRpc3Bvc2VkXCIsXG5cdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHQvKiogQHR5cGUge0Vycm9yfGZhbHNlfSAqL1xuXHRcdFx0dmFyIGFib3J0RXJyb3IgPSBmYWxzZTtcblx0XHRcdHZhciBkb0FwcGx5ID0gZmFsc2U7XG5cdFx0XHR2YXIgZG9EaXNwb3NlID0gZmFsc2U7XG5cdFx0XHR2YXIgY2hhaW5JbmZvID0gXCJcIjtcblx0XHRcdGlmIChyZXN1bHQuY2hhaW4pIHtcblx0XHRcdFx0Y2hhaW5JbmZvID0gXCJcXG5VcGRhdGUgcHJvcGFnYXRpb246IFwiICsgcmVzdWx0LmNoYWluLmpvaW4oXCIgLT4gXCIpO1xuXHRcdFx0fVxuXHRcdFx0c3dpdGNoIChyZXN1bHQudHlwZSkge1xuXHRcdFx0XHRjYXNlIFwic2VsZi1kZWNsaW5lZFwiOlxuXHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRGVjbGluZWQpIG9wdGlvbnMub25EZWNsaW5lZChyZXN1bHQpO1xuXHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVEZWNsaW5lZClcblx0XHRcdFx0XHRcdGFib3J0RXJyb3IgPSBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0XHRcdFwiQWJvcnRlZCBiZWNhdXNlIG9mIHNlbGYgZGVjbGluZTogXCIgK1xuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5tb2R1bGVJZCArXG5cdFx0XHRcdFx0XHRcdFx0Y2hhaW5JbmZvXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiZGVjbGluZWRcIjpcblx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkRlY2xpbmVkKSBvcHRpb25zLm9uRGVjbGluZWQocmVzdWx0KTtcblx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlRGVjbGluZWQpXG5cdFx0XHRcdFx0XHRhYm9ydEVycm9yID0gbmV3IEVycm9yKFxuXHRcdFx0XHRcdFx0XHRcIkFib3J0ZWQgYmVjYXVzZSBvZiBkZWNsaW5lZCBkZXBlbmRlbmN5OiBcIiArXG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0Lm1vZHVsZUlkICtcblx0XHRcdFx0XHRcdFx0XHRcIiBpbiBcIiArXG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0LnBhcmVudElkICtcblx0XHRcdFx0XHRcdFx0XHRjaGFpbkluZm9cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJ1bmFjY2VwdGVkXCI6XG5cdFx0XHRcdFx0aWYgKG9wdGlvbnMub25VbmFjY2VwdGVkKSBvcHRpb25zLm9uVW5hY2NlcHRlZChyZXN1bHQpO1xuXHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVVbmFjY2VwdGVkKVxuXHRcdFx0XHRcdFx0YWJvcnRFcnJvciA9IG5ldyBFcnJvcihcblx0XHRcdFx0XHRcdFx0XCJBYm9ydGVkIGJlY2F1c2UgXCIgKyBtb2R1bGVJZCArIFwiIGlzIG5vdCBhY2NlcHRlZFwiICsgY2hhaW5JbmZvXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiYWNjZXB0ZWRcIjpcblx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkFjY2VwdGVkKSBvcHRpb25zLm9uQWNjZXB0ZWQocmVzdWx0KTtcblx0XHRcdFx0XHRkb0FwcGx5ID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImRpc3Bvc2VkXCI6XG5cdFx0XHRcdFx0aWYgKG9wdGlvbnMub25EaXNwb3NlZCkgb3B0aW9ucy5vbkRpc3Bvc2VkKHJlc3VsdCk7XG5cdFx0XHRcdFx0ZG9EaXNwb3NlID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmV4Y2VwdGlvbiB0eXBlIFwiICsgcmVzdWx0LnR5cGUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGFib3J0RXJyb3IpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRlcnJvcjogYWJvcnRFcnJvclxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKGRvQXBwbHkpIHtcblx0XHRcdFx0YXBwbGllZFVwZGF0ZVttb2R1bGVJZF0gPSBuZXdNb2R1bGVGYWN0b3J5O1xuXHRcdFx0XHRhZGRBbGxUb1NldChvdXRkYXRlZE1vZHVsZXMsIHJlc3VsdC5vdXRkYXRlZE1vZHVsZXMpO1xuXHRcdFx0XHRmb3IgKG1vZHVsZUlkIGluIHJlc3VsdC5vdXRkYXRlZERlcGVuZGVuY2llcykge1xuXHRcdFx0XHRcdGlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLm8ocmVzdWx0Lm91dGRhdGVkRGVwZW5kZW5jaWVzLCBtb2R1bGVJZCkpIHtcblx0XHRcdFx0XHRcdGlmICghb3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdKVxuXHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0gPSBbXTtcblx0XHRcdFx0XHRcdGFkZEFsbFRvU2V0KFxuXHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0sXG5cdFx0XHRcdFx0XHRcdHJlc3VsdC5vdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZG9EaXNwb3NlKSB7XG5cdFx0XHRcdGFkZEFsbFRvU2V0KG91dGRhdGVkTW9kdWxlcywgW3Jlc3VsdC5tb2R1bGVJZF0pO1xuXHRcdFx0XHRhcHBsaWVkVXBkYXRlW21vZHVsZUlkXSA9IHdhcm5VbmV4cGVjdGVkUmVxdWlyZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y3VycmVudFVwZGF0ZSA9IHVuZGVmaW5lZDtcblxuXHQvLyBTdG9yZSBzZWxmIGFjY2VwdGVkIG91dGRhdGVkIG1vZHVsZXMgdG8gcmVxdWlyZSB0aGVtIGxhdGVyIGJ5IHRoZSBtb2R1bGUgc3lzdGVtXG5cdHZhciBvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXMgPSBbXTtcblx0Zm9yICh2YXIgaiA9IDA7IGogPCBvdXRkYXRlZE1vZHVsZXMubGVuZ3RoOyBqKyspIHtcblx0XHR2YXIgb3V0ZGF0ZWRNb2R1bGVJZCA9IG91dGRhdGVkTW9kdWxlc1tqXTtcblx0XHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXy5jW291dGRhdGVkTW9kdWxlSWRdO1xuXHRcdGlmIChcblx0XHRcdG1vZHVsZSAmJlxuXHRcdFx0KG1vZHVsZS5ob3QuX3NlbGZBY2NlcHRlZCB8fCBtb2R1bGUuaG90Ll9tYWluKSAmJlxuXHRcdFx0Ly8gcmVtb3ZlZCBzZWxmLWFjY2VwdGVkIG1vZHVsZXMgc2hvdWxkIG5vdCBiZSByZXF1aXJlZFxuXHRcdFx0YXBwbGllZFVwZGF0ZVtvdXRkYXRlZE1vZHVsZUlkXSAhPT0gd2FyblVuZXhwZWN0ZWRSZXF1aXJlICYmXG5cdFx0XHQvLyB3aGVuIGNhbGxlZCBpbnZhbGlkYXRlIHNlbGYtYWNjZXB0aW5nIGlzIG5vdCBwb3NzaWJsZVxuXHRcdFx0IW1vZHVsZS5ob3QuX3NlbGZJbnZhbGlkYXRlZFxuXHRcdCkge1xuXHRcdFx0b3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzLnB1c2goe1xuXHRcdFx0XHRtb2R1bGU6IG91dGRhdGVkTW9kdWxlSWQsXG5cdFx0XHRcdHJlcXVpcmU6IG1vZHVsZS5ob3QuX3JlcXVpcmVTZWxmLFxuXHRcdFx0XHRlcnJvckhhbmRsZXI6IG1vZHVsZS5ob3QuX3NlbGZBY2NlcHRlZFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0dmFyIG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzO1xuXG5cdHJldHVybiB7XG5cdFx0ZGlzcG9zZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y3VycmVudFVwZGF0ZVJlbW92ZWRDaHVua3MuZm9yRWFjaChmdW5jdGlvbiAoY2h1bmtJZCkge1xuXHRcdFx0XHRkZWxldGUgaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdO1xuXHRcdFx0fSk7XG5cdFx0XHRjdXJyZW50VXBkYXRlUmVtb3ZlZENodW5rcyA9IHVuZGVmaW5lZDtcblxuXHRcdFx0dmFyIGlkeDtcblx0XHRcdHZhciBxdWV1ZSA9IG91dGRhdGVkTW9kdWxlcy5zbGljZSgpO1xuXHRcdFx0d2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0dmFyIG1vZHVsZUlkID0gcXVldWUucG9wKCk7XG5cdFx0XHRcdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbbW9kdWxlSWRdO1xuXHRcdFx0XHRpZiAoIW1vZHVsZSkgY29udGludWU7XG5cblx0XHRcdFx0dmFyIGRhdGEgPSB7fTtcblxuXHRcdFx0XHQvLyBDYWxsIGRpc3Bvc2UgaGFuZGxlcnNcblx0XHRcdFx0dmFyIGRpc3Bvc2VIYW5kbGVycyA9IG1vZHVsZS5ob3QuX2Rpc3Bvc2VIYW5kbGVycztcblx0XHRcdFx0Zm9yIChqID0gMDsgaiA8IGRpc3Bvc2VIYW5kbGVycy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdGRpc3Bvc2VIYW5kbGVyc1tqXS5jYWxsKG51bGwsIGRhdGEpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18uaG1yRFttb2R1bGVJZF0gPSBkYXRhO1xuXG5cdFx0XHRcdC8vIGRpc2FibGUgbW9kdWxlICh0aGlzIGRpc2FibGVzIHJlcXVpcmVzIGZyb20gdGhpcyBtb2R1bGUpXG5cdFx0XHRcdG1vZHVsZS5ob3QuYWN0aXZlID0gZmFsc2U7XG5cblx0XHRcdFx0Ly8gcmVtb3ZlIG1vZHVsZSBmcm9tIGNhY2hlXG5cdFx0XHRcdGRlbGV0ZSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbbW9kdWxlSWRdO1xuXG5cdFx0XHRcdC8vIHdoZW4gZGlzcG9zaW5nIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsbCBkaXNwb3NlIGhhbmRsZXJcblx0XHRcdFx0ZGVsZXRlIG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXTtcblxuXHRcdFx0XHQvLyByZW1vdmUgXCJwYXJlbnRzXCIgcmVmZXJlbmNlcyBmcm9tIGFsbCBjaGlsZHJlblxuXHRcdFx0XHRmb3IgKGogPSAwOyBqIDwgbW9kdWxlLmNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0dmFyIGNoaWxkID0gX193ZWJwYWNrX3JlcXVpcmVfXy5jW21vZHVsZS5jaGlsZHJlbltqXV07XG5cdFx0XHRcdFx0aWYgKCFjaGlsZCkgY29udGludWU7XG5cdFx0XHRcdFx0aWR4ID0gY2hpbGQucGFyZW50cy5pbmRleE9mKG1vZHVsZUlkKTtcblx0XHRcdFx0XHRpZiAoaWR4ID49IDApIHtcblx0XHRcdFx0XHRcdGNoaWxkLnBhcmVudHMuc3BsaWNlKGlkeCwgMSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIHJlbW92ZSBvdXRkYXRlZCBkZXBlbmRlbmN5IGZyb20gbW9kdWxlIGNoaWxkcmVuXG5cdFx0XHR2YXIgZGVwZW5kZW5jeTtcblx0XHRcdGZvciAodmFyIG91dGRhdGVkTW9kdWxlSWQgaW4gb3V0ZGF0ZWREZXBlbmRlbmNpZXMpIHtcblx0XHRcdFx0aWYgKF9fd2VicGFja19yZXF1aXJlX18ubyhvdXRkYXRlZERlcGVuZGVuY2llcywgb3V0ZGF0ZWRNb2R1bGVJZCkpIHtcblx0XHRcdFx0XHRtb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbb3V0ZGF0ZWRNb2R1bGVJZF07XG5cdFx0XHRcdFx0aWYgKG1vZHVsZSkge1xuXHRcdFx0XHRcdFx0bW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMgPVxuXHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1tvdXRkYXRlZE1vZHVsZUlkXTtcblx0XHRcdFx0XHRcdGZvciAoaiA9IDA7IGogPCBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRkZXBlbmRlbmN5ID0gbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXNbal07XG5cdFx0XHRcdFx0XHRcdGlkeCA9IG1vZHVsZS5jaGlsZHJlbi5pbmRleE9mKGRlcGVuZGVuY3kpO1xuXHRcdFx0XHRcdFx0XHRpZiAoaWR4ID49IDApIG1vZHVsZS5jaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbiAocmVwb3J0RXJyb3IpIHtcblx0XHRcdC8vIGluc2VydCBuZXcgY29kZVxuXHRcdFx0Zm9yICh2YXIgdXBkYXRlTW9kdWxlSWQgaW4gYXBwbGllZFVwZGF0ZSkge1xuXHRcdFx0XHRpZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGFwcGxpZWRVcGRhdGUsIHVwZGF0ZU1vZHVsZUlkKSkge1xuXHRcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18ubVt1cGRhdGVNb2R1bGVJZF0gPSBhcHBsaWVkVXBkYXRlW3VwZGF0ZU1vZHVsZUlkXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBydW4gbmV3IHJ1bnRpbWUgbW9kdWxlc1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50VXBkYXRlUnVudGltZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjdXJyZW50VXBkYXRlUnVudGltZVtpXShfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gY2FsbCBhY2NlcHQgaGFuZGxlcnNcblx0XHRcdGZvciAodmFyIG91dGRhdGVkTW9kdWxlSWQgaW4gb3V0ZGF0ZWREZXBlbmRlbmNpZXMpIHtcblx0XHRcdFx0aWYgKF9fd2VicGFja19yZXF1aXJlX18ubyhvdXRkYXRlZERlcGVuZGVuY2llcywgb3V0ZGF0ZWRNb2R1bGVJZCkpIHtcblx0XHRcdFx0XHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXy5jW291dGRhdGVkTW9kdWxlSWRdO1xuXHRcdFx0XHRcdGlmIChtb2R1bGUpIHtcblx0XHRcdFx0XHRcdG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzID1cblx0XHRcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXNbb3V0ZGF0ZWRNb2R1bGVJZF07XG5cdFx0XHRcdFx0XHR2YXIgY2FsbGJhY2tzID0gW107XG5cdFx0XHRcdFx0XHR2YXIgZXJyb3JIYW5kbGVycyA9IFtdO1xuXHRcdFx0XHRcdFx0dmFyIGRlcGVuZGVuY2llc0ZvckNhbGxiYWNrcyA9IFtdO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHR2YXIgZGVwZW5kZW5jeSA9IG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzW2pdO1xuXHRcdFx0XHRcdFx0XHR2YXIgYWNjZXB0Q2FsbGJhY2sgPVxuXHRcdFx0XHRcdFx0XHRcdG1vZHVsZS5ob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcGVuZGVuY3ldO1xuXHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JIYW5kbGVyID1cblx0XHRcdFx0XHRcdFx0XHRtb2R1bGUuaG90Ll9hY2NlcHRlZEVycm9ySGFuZGxlcnNbZGVwZW5kZW5jeV07XG5cdFx0XHRcdFx0XHRcdGlmIChhY2NlcHRDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChjYWxsYmFja3MuaW5kZXhPZihhY2NlcHRDYWxsYmFjaykgIT09IC0xKSBjb250aW51ZTtcblx0XHRcdFx0XHRcdFx0XHRjYWxsYmFja3MucHVzaChhY2NlcHRDYWxsYmFjayk7XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3JIYW5kbGVycy5wdXNoKGVycm9ySGFuZGxlcik7XG5cdFx0XHRcdFx0XHRcdFx0ZGVwZW5kZW5jaWVzRm9yQ2FsbGJhY2tzLnB1c2goZGVwZW5kZW5jeSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGZvciAodmFyIGsgPSAwOyBrIDwgY2FsbGJhY2tzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FsbGJhY2tzW2tdLmNhbGwobnVsbCwgbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMpO1xuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIGVycm9ySGFuZGxlcnNba10gPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JIYW5kbGVyc1trXShlcnIsIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogb3V0ZGF0ZWRNb2R1bGVJZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZXBlbmRlbmN5SWQ6IGRlcGVuZGVuY2llc0ZvckNhbGxiYWNrc1trXVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycjIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25FcnJvcmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5vbkVycm9yZWQoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJhY2NlcHQtZXJyb3ItaGFuZGxlci1lcnJvcmVkXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogb3V0ZGF0ZWRNb2R1bGVJZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlcGVuZGVuY3lJZDogZGVwZW5kZW5jaWVzRm9yQ2FsbGJhY2tzW2tdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVycjIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvcmlnaW5hbEVycm9yOiBlcnJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlRXJyb3JlZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycjIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25FcnJvcmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcImFjY2VwdC1lcnJvcmVkXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG91dGRhdGVkTW9kdWxlSWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVwZW5kZW5jeUlkOiBkZXBlbmRlbmNpZXNGb3JDYWxsYmFja3Nba10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVyclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVFcnJvcmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycik7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvYWQgc2VsZiBhY2NlcHRlZCBtb2R1bGVzXG5cdFx0XHRmb3IgKHZhciBvID0gMDsgbyA8IG91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlcy5sZW5ndGg7IG8rKykge1xuXHRcdFx0XHR2YXIgaXRlbSA9IG91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlc1tvXTtcblx0XHRcdFx0dmFyIG1vZHVsZUlkID0gaXRlbS5tb2R1bGU7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0aXRlbS5yZXF1aXJlKG1vZHVsZUlkKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBpdGVtLmVycm9ySGFuZGxlciA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRpdGVtLmVycm9ySGFuZGxlcihlcnIsIHtcblx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXG5cdFx0XHRcdFx0XHRcdFx0bW9kdWxlOiBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbbW9kdWxlSWRdXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyMikge1xuXHRcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkVycm9yZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLm9uRXJyb3JlZCh7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcInNlbGYtYWNjZXB0LWVycm9yLWhhbmRsZXItZXJyb3JlZFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVycjIsXG5cdFx0XHRcdFx0XHRcdFx0XHRvcmlnaW5hbEVycm9yOiBlcnJcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlRXJyb3JlZCkge1xuXHRcdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycjIpO1xuXHRcdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25FcnJvcmVkKSB7XG5cdFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcInNlbGYtYWNjZXB0LWVycm9yZWRcIixcblx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVyclxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVFcnJvcmVkKSB7XG5cdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvdXRkYXRlZE1vZHVsZXM7XG5cdFx0fVxuXHR9O1xufVxuX193ZWJwYWNrX3JlcXVpcmVfXy5obXJJLmpzb25wID0gZnVuY3Rpb24gKG1vZHVsZUlkLCBhcHBseUhhbmRsZXJzKSB7XG5cdGlmICghY3VycmVudFVwZGF0ZSkge1xuXHRcdGN1cnJlbnRVcGRhdGUgPSB7fTtcblx0XHRjdXJyZW50VXBkYXRlUnVudGltZSA9IFtdO1xuXHRcdGN1cnJlbnRVcGRhdGVSZW1vdmVkQ2h1bmtzID0gW107XG5cdFx0YXBwbHlIYW5kbGVycy5wdXNoKGFwcGx5SGFuZGxlcik7XG5cdH1cblx0aWYgKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oY3VycmVudFVwZGF0ZSwgbW9kdWxlSWQpKSB7XG5cdFx0Y3VycmVudFVwZGF0ZVttb2R1bGVJZF0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm1bbW9kdWxlSWRdO1xuXHR9XG59O1xuX193ZWJwYWNrX3JlcXVpcmVfXy5obXJDLmpzb25wID0gZnVuY3Rpb24gKFxuXHRjaHVua0lkcyxcblx0cmVtb3ZlZENodW5rcyxcblx0cmVtb3ZlZE1vZHVsZXMsXG5cdHByb21pc2VzLFxuXHRhcHBseUhhbmRsZXJzLFxuXHR1cGRhdGVkTW9kdWxlc0xpc3Rcbikge1xuXHRhcHBseUhhbmRsZXJzLnB1c2goYXBwbHlIYW5kbGVyKTtcblx0Y3VycmVudFVwZGF0ZUNodW5rcyA9IHt9O1xuXHRjdXJyZW50VXBkYXRlUmVtb3ZlZENodW5rcyA9IHJlbW92ZWRDaHVua3M7XG5cdGN1cnJlbnRVcGRhdGUgPSByZW1vdmVkTW9kdWxlcy5yZWR1Y2UoZnVuY3Rpb24gKG9iaiwga2V5KSB7XG5cdFx0b2JqW2tleV0gPSBmYWxzZTtcblx0XHRyZXR1cm4gb2JqO1xuXHR9LCB7fSk7XG5cdGN1cnJlbnRVcGRhdGVSdW50aW1lID0gW107XG5cdGNodW5rSWRzLmZvckVhY2goZnVuY3Rpb24gKGNodW5rSWQpIHtcblx0XHRpZiAoXG5cdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8oaW5zdGFsbGVkQ2h1bmtzLCBjaHVua0lkKSAmJlxuXHRcdFx0aW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdICE9PSB1bmRlZmluZWRcblx0XHQpIHtcblx0XHRcdHByb21pc2VzLnB1c2gobG9hZFVwZGF0ZUNodW5rKGNodW5rSWQsIHVwZGF0ZWRNb2R1bGVzTGlzdCkpO1xuXHRcdFx0Y3VycmVudFVwZGF0ZUNodW5rc1tjaHVua0lkXSA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1cnJlbnRVcGRhdGVDaHVua3NbY2h1bmtJZF0gPSBmYWxzZTtcblx0XHR9XG5cdH0pO1xuXHRpZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5mKSB7XG5cdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5mLmpzb25wSG1yID0gZnVuY3Rpb24gKGNodW5rSWQsIHByb21pc2VzKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGN1cnJlbnRVcGRhdGVDaHVua3MgJiZcblx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vKGN1cnJlbnRVcGRhdGVDaHVua3MsIGNodW5rSWQpICYmXG5cdFx0XHRcdCFjdXJyZW50VXBkYXRlQ2h1bmtzW2NodW5rSWRdXG5cdFx0XHQpIHtcblx0XHRcdFx0cHJvbWlzZXMucHVzaChsb2FkVXBkYXRlQ2h1bmsoY2h1bmtJZCkpO1xuXHRcdFx0XHRjdXJyZW50VXBkYXRlQ2h1bmtzW2NodW5rSWRdID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG59O1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmhtck0gPSBmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBmZXRjaCA9PT0gXCJ1bmRlZmluZWRcIikgdGhyb3cgbmV3IEVycm9yKFwiTm8gYnJvd3NlciBzdXBwb3J0OiBuZWVkIGZldGNoIEFQSVwiKTtcblx0cmV0dXJuIGZldGNoKF9fd2VicGFja19yZXF1aXJlX18ucCArIF9fd2VicGFja19yZXF1aXJlX18uaG1yRigpKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG5cdFx0aWYocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHJldHVybjsgLy8gbm8gdXBkYXRlIGF2YWlsYWJsZVxuXHRcdGlmKCFyZXNwb25zZS5vaykgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGZldGNoIHVwZGF0ZSBtYW5pZmVzdCBcIiArIHJlc3BvbnNlLnN0YXR1c1RleHQpO1xuXHRcdHJldHVybiByZXNwb25zZS5qc29uKCk7XG5cdH0pO1xufTtcblxuLy8gbm8gb24gY2h1bmtzIGxvYWRlZFxuXG4vLyBubyBqc29ucCBmdW5jdGlvbiIsIiIsIi8vIG1vZHVsZSBjYWNoZSBhcmUgdXNlZCBzbyBlbnRyeSBpbmxpbmluZyBpcyBkaXNhYmxlZFxuLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oXCIuL2luZGV4LmpzXCIpO1xuIiwiIl0sIm5hbWVzIjpbImF1dG9UYWJzIiwiJCIsImxlbmd0aCIsInNldEludGVydmFsIiwiYWN0aXZlX2F1dG9UYWIiLCJmaXJzdF9hdXRvVGFiIiwiaGFzQ2xhc3MiLCJjbGljayIsIm5leHQiLCJiYUNvbGxhcHNlciIsImVsIiwiZWxUYXJnZXQiLCJidG4iLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJidG5UeHQiLCJidG5UYXJnZXQiLCJidG5UYXJnZXQyIiwiY3VycmVudFNsaWRlIiwicXVlcnlTZWxlY3RvckFsbCIsImZvckVhY2giLCJpdGVtIiwiaW5kZXgiLCJjdXJyZW50RXhwYW5kZXIiLCJoZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJzdHlsZSIsIm1heEhlaWdodCIsImNvbmNhdCIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsInByZXZlbnREZWZhdWx0Iiwic2xpZGVyIiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJyZW1vdmUiLCJzY3JvbGxJbnRvVmlldyIsImJsb2NrIiwic2V0VGltZW91dCIsImFkZCIsImV4cGFuZEJBSW1hZ2UiLCJlYWNoIiwicGFyZW50IiwicHJldiIsImNzcyIsInJlbW92ZUNsYXNzIiwiZmluZCIsIm91dGVySGVpZ2h0IiwiYWRkQ2xhc3MiLCJiYWNrVG9Ub3AiLCJnZXRFbGVtZW50QnlJZCIsIndpbmRvdyIsInNjcm9sbCIsInRvcCIsImxlZnQiLCJiZWhhdmlvciIsImhpZGVfYm94X2N0YV93aWRnZXQiLCJfY2xhc3NDYWxsQ2hlY2siLCJjb29raWVfbmFtZSIsImNvb2tpZV9kdXJhdGlvbiIsIndpZGdldF9zZWxlY3RvciIsImJveF9zZWxlY3RvciIsImluaXQiLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJ2YWx1ZSIsIl9kb2N1bWVudCRxdWVyeVNlbGVjdCIsIl90aGlzIiwiZ2V0X2Nvb2tpZSIsImhpZGVfYm94Iiwic2hvd19ib3giLCJlIiwic2V0X2Nvb2tpZSIsImJveCIsIm5hbWUiLCJkYXlzIiwiZGF0ZSIsIkRhdGUiLCJzZXRUaW1lIiwiZ2V0VGltZSIsImNvb2tpZSIsInRvVVRDU3RyaW5nIiwicGFydHMiLCJzcGxpdCIsInBvcCIsInNoaWZ0IiwicHJpY2VDYWxjdWxhdG9yV2lkZ2V0IiwiY2FsY3VsYXRvcldpZGdldCIsImFycm93SW5jcmVtZW50IiwiYXJyb3dEZWNyZW1lbnQiLCJpbnB1dFRvVXBkYXRlIiwicGFyc2VJbnQiLCJwcmljZUNhbGN1bGF0b3IiLCJjYWxjRm9ybSIsImxlZ2VuZHMiLCJyYWRpb0xlZ2VuZHMiLCJsZWdlbmQiLCJ3cmFwcGVyRGl2IiwiY3JlYXRlRWxlbWVudCIsInBhcmVudE5vZGUiLCJpbnNlcnRCZWZvcmUiLCJhcHBlbmRDaGlsZCIsImhhbmRsZUZpZWxkc2V0Q2hhbmdlcyIsImZpZWxkc2V0SWQiLCJmaWVsZHNldCIsImlucHV0IiwiY2hlY2tlZFJhZGlvIiwibGFiZWwiLCJpZCIsImxhYmVsVGV4dCIsInRleHRDb250ZW50IiwidHJpbSIsImZpZWxkc2V0Q2hhbmdlcyIsImlucHV0SWQiLCJ0YXJnZXQiLCJmaWVsZHNldENoYW5nZSIsImNvbnNvbGUiLCJsb2ciLCJnZXRWYWx1ZXMiLCJ3VHlwZVNlbGVjdGlvbiIsIndUeXBlSWQiLCJvcHRpb25zIiwic2VsZWN0ZWRJbmRleCIsImlubmVyVGV4dCIsIm5QYWdlc1ZhbCIsIm5QYWdlcyIsImhSYXRlVmFsIiwiaFJhdGUiLCJldmVudERhdGEiLCJmaWVsZHNldHMiLCJsZWdlbmRUZXh0IiwiZm9ybWF0dGVkTGVnZW5kIiwicmVwbGFjZSIsIm1hdGNoIiwiY2hyIiwidG9VcHBlckNhc2UiLCJ0b0xvd2VyQ2FzZSIsImRhdGFMYXllciIsInB1c2giLCJfb2JqZWN0U3ByZWFkIiwic3RlcE4iLCJqUXVlcnkiLCJvbiIsImZvcm1faWQiLCJjdXJyZW50X3BhZ2UiLCJmb3JtV3JhcCIsInNlY1BhZ2UiLCJwYXJlbnRFbGVtZW50IiwiY2hpbGRyZW4iLCJidXR0b25OZXh0IiwiZmllbGRzZXRDb250YWluZXIiLCJmb3JtSWQiLCJjdXN0b21TcGlubmVycyIsInNwaW5uZXIiLCJlbGVtIiwiZmllbGQiLCJ1cEFycm93IiwiY2xhc3NOYW1lIiwicHJlcGVuZCIsImRvd25BcnJvdyIsImFwcGVuZCIsImN1cnJlbnRWYWwiLCJwYXJzZUN1cnJlbmN5VG9DZW50cyIsIm5ld1ZhbCIsImZvcm1hdFZhbCIsImZvcm1hdENlbnRzQXNDdXJyZW5jeSIsIm1pbiIsIkV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsIm1heCIsImN1cnJlbmN5U3RyIiwiY2xlYW5TdHIiLCJpbmNsdWRlcyIsImNvbW1hUG9zIiwiaW5kZXhPZiIsImRvdFBvcyIsImxhc3RJbmRleE9mIiwiTWF0aCIsInJvdW5kIiwicGFyc2VGbG9hdCIsImNlbnRzIiwidG9GaXhlZCIsIm1vcmVDYXNlU3R1ZGllcyIsImFqYXgiLCIkb3RoZXIiLCIkb2Zmc2V0IiwiZGF0YSIsIiRsb2FkTW9yZSIsIiRwYWdpbmF0aW9uIiwiJHBlclBhZ2UiLCIkZm91bmRQb3N0cyIsIiRjYXNlU3R1ZGllcyIsInRvdGFsQ291bnQiLCIkYW5pbWF0ZWRDbGFzcyIsImdldF9wb3N0cyIsIm9mZnNldCIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsInBvc3RzX3Blcl9wYWdlIiwiY2F0ZWdvcnlfaWQiLCJmaWx0ZXIiLCJ1cmwiLCJhZG1pbl91cmwiLCJtZXRob2QiLCJkYXRhVHlwZSIsImNhc2Vfc3R1ZGllcyIsInN1Y2Nlc3MiLCJyZXNwb25zZSIsImh0bWwiLCJjb3VudCIsIm91dHB1dCIsImFuaW1hdGUiLCJvcGFjaXR5IiwiaSIsIm9iaiIsIiRtb3JlRGF0YSIsIiRtYWluQ29udCIsImhpZGUiLCJjYXNlU3R1ZHlUYWJzIiwiJGNhc2VUYWJzIiwiJHRoaXMiLCIkdGFic1BhbmVsIiwiJHRhYkl0ZW0iLCJ0YWJJdGVtSW5kZXgiLCJhdHRyIiwiJHRhYiIsInBhcmVudHMiLCIkaW1nU3JjIiwiY2FsY3VsYXRlIiwiY2FsYyIsInJlc3VsdHMiLCJjb252IiwidmlzaXRzIiwiYW5zd2VyIiwiZ29vZCIsImJhZCIsImNhbGNBZ2FpbiIsInJlc3VsdCIsIk51bWJlciIsImlubmVySFRNTCIsImNvbnZlcnNpb25zQ2FsY3VsYXRvciIsImZvcm0iLCJleHBhbmRJbWFnZSIsInRyaWdnZXJFeHBhbmRJbWFnZSIsImN1cnJlbnRVcmxIYXNoIiwibG9jYXRpb24iLCJwcm9wIiwic3Vic3RyIiwidGFicyIsInRhYiIsInByb2plY3RzIiwidGFic0lEIiwidGFiTmF2SXRlbUNvbnRyb2xzIiwiY2xvc2VUYWJzIiwicHJvamVjdEhhc2giLCJjbG9zZXN0IiwicHJldkFsbCIsIm9wZW5UYWIiLCJ0cmlnZ2VyIiwiZXhwYW5kZXJzIiwidHJpZ2dlckhyZWYiLCJkYXRhc2V0IiwiZXhwYW5kZXJzQnRuIiwiZXhwYW5kZXJzQnRuUHJldiIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJnZXQiLCJjb2xsYXBzZXJzIiwiY29sbGFwc2VyIiwidG9nZ2xlIiwic2Nyb2xsVXBCeSIsImFtb3VudCIsInNjcm9sbFRvcCIsImZha2VGb290ZXJNZW51IiwiZmFrZU1lbnUiLCJoYW5kbGVDbGljayIsImhhbmRsZUF1eENsaWNrIiwiaGFuZGxlQ29udGV4dE1lbnUiLCJ0YWdOYW1lIiwiZ2V0QXR0cmlidXRlIiwiaHJlZiIsImJ1dHRvbiIsIm9wZW4iLCJmb290QWNjb3JkaW9uIiwid2lkdGgiLCJmb290ZXJIb3ZlciIsIm1vdXNlbGVhdmUiLCJtb3VzZWVudGVyIiwiZ0Zvcm1zIiwid3JhcCIsIm9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm9ic2VydmUiLCJhdHRyaWJ1dGVzIiwiYXR0cmlidXRlRmlsdGVyIiwiY2hpbGRMaXN0IiwiY2hhcmFjdGVyRGF0YSIsIm0iLCJlMiIsImhlcm9QbGF5ZXIiLCJzZWxlY3RvciIsInZUYWdzIiwidmlkZW9SV0QiLCJ2VGFnIiwiaXMiLCJhdXRvcGxheSIsInZpZGVvQWN0aW9ucyIsIiR2aWRlb0NvbnQiLCJ2aWRlb0NvbnQiLCJwbGF5QWN0aW9uIiwibXV0ZUFjdGlvbiIsImNvbnRyb2xBY3Rpb24iLCJjb250cm9scyIsInBhdXNlIiwiY3VycmVudFRpbWUiLCJ0b2dnbGVQbGF5IiwicGF1c2VkIiwiZW5kZWQiLCJwbGF5IiwidG9nZ2xlTXV0ZSIsIm11dGVkIiwidG9nZ2xlQ29udHJvbCIsInBsYXlWaWRlbyIsInBsYXlCdG5zIiwicGxheUJ0biIsInN0b3BQcm9wYWdhdGlvbiIsImJvZHkiLCJsb2FkIiwic3RvcFZpZGVvIiwiY2xvc2VCdG5zIiwiY2xvc2VCdG4iLCJsb2FkTW9yZVByb2plY3RzIiwidmlzaWJsZSIsInRvdGFsIiwibG9hZE1vcmUiLCJsaXN0U2VjdGlvbiIsInByb2plY3RzSnNvbiIsImFjdGlvbiIsInR5cGUiLCJiZWZvcmVTZW5kIiwieGhyIiwibG9hZE1vcmVTb2x1dGlvbnMiLCJ0YWJzUGFuZWwiLCJsb2FkTW9yZUJ0bnMiLCJ0YWJzTmF2SXRlbXMiLCJzZWxlY3ROYXZJdGVtcyIsInBhbmVsIiwiYm94ZXMiLCJsb2FkTW9yZUJ0biIsInRhYnNOYXZJdGVtIiwicmVzZXRTdGF0ZSIsInNlbGVjdE5hdkl0ZW0iLCJ0cmlnZ2VyU3RhdGUiLCJsb2NhdGlvbkFjY29yZGlvbiIsInJlbW92ZU9wZW5lZENvbnRlbnQiLCJhY2NvcmRpb25JdGVtIiwiaXRlbTIiLCJpbmRleDIiLCJkZXNjcmlwIiwiZGVzY3JpcHRpb24iLCJsb2dvU2xpZGVyIiwiaGFuZGxlU2xpZGVySW50ZXJzZWN0aW9uIiwiZW50cmllcyIsImVudHJ5IiwiaXNJbnRlcnNlY3RpbmciLCJTbGlkZXJDbGllbnRMb2dvcyIsIlN3aXBlciIsInNsaWRlc1BlclZpZXciLCJsb29wIiwic3BhY2VCZXR3ZWVuIiwiZGVsYXkiLCJkaXNhYmxlT25JbnRlcmFjdGlvbiIsIndhaXRGb3JUcmFuc2l0aW9uIiwic3BlZWQiLCJTbGlkZXJDbGllbnRMb2dvc1JldiIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwidGhyZXNob2xkIiwibWVudUhvdmVyIiwibWVudUl0ZW1zIiwidGV4dCIsIm5ld0NvbnRlbnQiLCJjbG9uZWRJdGVtIiwiY2xvbmVOb2RlIiwibmV4dFNpYmxpbmciLCJwYXVzZUhlcm9BbmltYXRpb25zIiwiZWxlbWVudHNUb09ic2VydmUiLCJlbGVtZW50IiwicHJvZ3Jlc3NCYXJTY3JvbGwiLCJiYXIiLCJwcm9ncmVzc0JhciIsIndpblNjcm9sbCIsImRvY3VtZW50RWxlbWVudCIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsInNjcm9sbGVkIiwicmVhZE1vcmVYIiwidGFiSGVhZHMiLCJ0YWJIZWFkIiwiYWN0aXZhdGVUYWIiLCJvdGhlclRhYkhlYWQiLCJjb250ZW50IiwiYWN0aXZlQ29udGVudCIsImJ1dHRvbnMiLCJmdWxsQmxvY2siLCJjb2xsYXBzYWJsZSIsImJ1dHRvblRleHQiLCJzY3JvbGxlcjI0IiwiaXNUb3VjaERldmljZSIsIm5hdmlnYXRvciIsIm1heFRvdWNoUG9pbnRzIiwibXNNYXhUb3VjaFBvaW50cyIsInNjcm9sbFRvTWlkZGxlIiwic2xpZGVJbmRleCIsInNjcm9sbGVyQ2VudGVyIiwic2Nyb2xsZXIiLCJjbGllbnRXaWR0aCIsInNsaWRlQ2VudGVyIiwic2xpZGVXaWR0aCIsIm5ld1Njcm9sbFBvc2l0aW9uIiwic2Nyb2xsUG9zaXRpb24iLCJtYXhTY3JvbGwiLCJpbm5lclNjcm9sbGVyIiwidHJhbnNmb3JtIiwicmlnaHQiLCJzbGlkZXMiLCJzbGlkZSIsImxhc3RTY3JvbGxQb3NpdGlvbiIsIm9mZnNldFdpZHRoIiwic2Nyb2xsV2lkdGgiLCJzY3JvbGxBbW91bnQiLCJkZWx0YVkiLCJkaXJlY3Rpb24iLCJyZW1haW5pbmdTY3JvbGwiLCJzbGlkZVN0YXJ0Iiwic2xpZGVFbmQiLCJ1cGRhdGVQcm9ncmVzc0JhciIsInByb2dyZXNzIiwic2Nyb2xsTGVmdCIsIm9ic2VydmVyT3B0aW9ucyIsInJvb3QiLCJvYnNlcnZlckNhbGxiYWNrIiwidG9nZ2xlU2VhcmNoIiwic2VhcmNoRm9ybSIsInNlYXJjaElucHV0Iiwic2VhcmNoQnRuIiwiJHNlYXJjaF93cmFwcGVyIiwib3BlblNlYXJjaCIsImNsb3NlU2VhcmNoIiwibG9nRm9jdXMiLCJzZXRBdHRyaWJ1dGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJmb2N1cyIsInN0aWNreVBvcFVwIiwicG9wdXBNIiwidG9nZ2xlT25DbGFzcyIsInBvcHVwVCIsIm90aGVyUG9wIiwiYWRkT25DbGFzcyIsInJlbW92ZU9uQ2xhc3MiLCJoYW5kbGVDbG9zZSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJjaGVja0xvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJoYW5kbGVJbnRlcnNlY3Rpb24iLCJpbnB1dE1haWwiLCJmb290ZXIiLCJwb3B1cFRyaWdnZXJlZCIsImludGVyYWN0aW9uRGV0ZWN0ZWQiLCJpbnRlcmFjdGlvblRpbWVyIiwic2hvd1BvcHVwIiwiYm94Q1RBIiwic3RhcnRUaW1lciIsInRhYnNVbmRlcmxpbmUiLCJ0YWJOYXZzIiwiaW5uZXJXaWR0aCIsIm1vdmVUYWJzVW5kZXJsaW5lIiwidGFiTmF2IiwidGFic1VuZGVsaW5lIiwidG9nZ2xlRWxlbWVudCIsInRvZ2dsZUNsYXNzIiwiY3JlYXRlQWNjb3JkaW9ucyIsImNhbGxBY2NvcmRpb25zIiwiRFNNUEFjY29yZGlvbnMiLCJhY2NvcmRpb25JRCIsImFjY29yZGlvblNlbGVjdG9yIiwiYWNjb3JkaW9uSXRlbXMiLCJhY2NvcmRpb25zIiwiYWNjb3JkaW9uT3B0aW9ucyIsImFjYyIsImFjY0lEIiwiY2FsbElEIiwiYm94Q3RhUG9zaXRpb24iLCJ1cGRhdGVCb3hDdGFQb3NpdGlvbiIsInRvY0NvbnRhaW5lciIsImJveEN0YSIsInRvY0hlaWdodCIsInByb2dyZXNzSGVpZ2h0IiwidG90YWxIZWlnaHQiLCJzZXRQcm9wZXJ0eSIsIm11dGF0aW9uT2JzZXJ2ZXIiLCJvYnNlcnZlU2l6ZUNoYW5nZXMiLCJyZXNpemVPYnNlcnZlciIsIlJlc2l6ZU9ic2VydmVyIiwic3VidHJlZSIsImRzYmxzU2xpZGVyIiwic2ltcGxlU2xpZGVycyIsImFkdmFuY2VkU2xpZGVycyIsImJhU2xpZGVyIiwidlNsaWRlciIsImNhbGxTbGlkZXJzIiwic2xpZGVySW5kIiwiaGFuZGxlU2xpZGVySW5kIiwic2xpZGVySW5kdXN0cnkiLCJicmVha3BvaW50cyIsInNsaWRlVG9DbGlja2VkU2xpZGUiLCJ1bm9ic2VydmUiLCJTd2lwZXJXaXRoVGFicyIsImlzQXV0b1BsYXlPbiIsImlzTGF6eUxvYWRPbiIsImlzQnJlYWtwb2ludHNPbiIsImlzTmF2aWdhdGlvbk9uIiwidV9wYXJzZUJvb2wiLCJpc0xvb3BPbiIsImlzU2xpZGVUb0NsaWNlZFNsaWRlT24iLCJhZHZhbmNlZE5hbWUiLCJhZHZTbGlkZXJTZWwiLCJhZHZTbGlkZXJUYWJzIiwiYWR2U2xpZGVyTGlzdCIsImFkdlNsaWRlck9wdGlvbnMiLCJhZHZTbGlkZXJzIiwic2xpZGVyVGFiT3B0aW9ucyIsImFkdlNsaWRlck5hdiIsInNsaWRlck5hdiIsImFkdlNsaWRlclRodW1icyIsInNsaWRlclRodW1iT3B0aW9ucyIsImJlZm9yZUFmdGVyVGh1bWJTbGlkZXIiLCJjZW50ZXJlZFNsaWRlcyIsIm9ic2VydmVQYXJlbnRzIiwiY2FsY3VsYXRlSGVpZ2h0IiwicGFnaW5hdGlvbiIsImNsaWNrYWJsZSIsImFjdGl2ZSIsImZyZWVNb2RlIiwid2F0Y2hTbGlkZXNQcm9ncmVzcyIsIndyYXBwZXJDbGFzcyIsImlzVGh1bWJzIiwic2xpZGVySUQiLCJzbGlkZXJQYXJlbnQiLCJzbGlkZXJUaHVtYnNTZWxlY3RvciIsInNsaWRlclRodW1ic0lEIiwic2xpZGVyVGFiSUQiLCJ0aHVtYnMiLCJzd2lwZXIiLCJub1N3aXBpbmdTZWxlY3RvciIsImluaXRpYWxpemVkIiwiY29udGFpbmVyRWxlbWVudCIsInVuZGVybGluZSIsImFjdGl2ZUluZGV4IiwiYmFTbGlkZXJFbCIsImhhbmRsZUJhU2xpZGVySW50ZXJzZWN0aW9uIiwiYmFTbGlkZXJFbENvdW50Iiwic3RhcnRTbGlkZSIsImJhVGh1bWJzIiwiYWxsb3dUb3VjaE1vdmUiLCJhdXRvSGVpZ2h0IiwibmF2aWdhdGlvbiIsIm5leHRFbCIsInByZXZFbCIsInNsaWRlVG8iLCJjc1RodW1icyIsImNzU2xpZGVyIiwicHJvY2Vzc1NsaWRlciIsImhhbmRsZVByU2xpZGVySW50ZXJzZWN0aW9uIiwicHJUaHVtYnMiLCJwclNsaWRlciIsInNsaWRlQ2hhbmdlIiwianVtcGVyIiwidGh1bWJTbGlkZSIsIm9mZnNldExlZnQiLCJhaVdpZHRoIiwibmF2UGFyZW50cyIsIm5hdlBhcmVudCIsIml0ZW1zIiwiYWN0aXZlSXRlbSIsIkRTTVBTbGlkZXJEU0JMUyIsImRzYmxzU2VsIiwiZHNibHNTZWxNb2IiLCJkc2Jsc1NsaWRlckxpc3QiLCJkc2Jsc1NsaWRlck1vYmlsZUxpc3QiLCJkc2JscyIsInNsaWRlck1vYmlsZUlEIiwic2ltcGxlTmFtZSIsInNpbXBsZVNsaWRlclNlbCIsInNpbXBsZVNsaWRlckxpc3QiLCJzaW1wbGVTbGlkZXJPcHRpb25zIiwiY3VycmVudFdpZHRoIiwibm9Nb2JpbGUiLCJkZXN0cm95IiwidlNsaWRlckVsIiwidlNsaWRlckVsQ291bnQiLCJzbGlkZXJUb3AiLCJlZmZlY3QiLCJpbml0aWFsU2xpZGUiLCJsb29wZWRTbGlkZXMiLCJsb29wQWRkaXRpb25hbFNsaWRlcyIsInNsaWRlckJvdHRvbSIsImNvbnRyb2xsZXIiLCJjb250cm9sIiwiRFNNUFRhYlRvQWNjb3JkaW9uTW9iaWxlIiwidGFiYWNjSUQiLCJ0YWJhY2NTZWxlY3RvciIsInRhYmFjY0l0ZW1zIiwiY2FsbFRhYkFjY29yZGlvbnNNb2JpbGUiLCJ0YUlEIiwicmVhZE1vcmUiLCJyZWFkTW9yZVdyYXBwZXJzIiwicmVhZE1vcmVXcmFwcGVyIiwicmVhZE1vcmVCdG4iLCJyZWFkTW9yZUJ0bkNsaWNrIiwicmVhZE1vcmVUZXh0IiwiaXNBY3RpdmUiLCJyZWFkTW9yZVRleHRIZWlnaHQiLCJzaG93VGV4dCIsImhpZGVUZXh0IiwibW9iaWxlTmF2Iiwic3ViRWwiLCJidG5zIiwic3ViTWVudXMiLCJuZXdXaWR0aCIsInN1Yk1lbnUiLCJkaXNwbGF5Iiwic2hpZnRGb2N1cyIsImtlZXBGb2N1c0luc2lkZURpdiIsImNsb3NlTWVudUVzYyIsIm90aGVySXRlbSIsIm90aGVyTWVudSIsIm1lbnUiLCJmb2N1c2FibGVFbGVtZW50cyIsIkFycmF5IiwicHJvdG90eXBlIiwic2xpY2UiLCJjYWxsIiwiZmlyc3RFbGVtZW50IiwibGFzdEVsZW1lbnQiLCJzaGlmdEtleSIsImFjdGl2ZUVsZW1lbnQiLCJ1X3Rocm90dGxlZCIsInN0aWNreUhlYWRlciIsImVsQ2xhc3MiLCIkJGhlYWRlciIsImVsSGVpZ2h0Iiwib25TY3JvbGwiLCJwYWdlWU9mZnNldCIsInRocm90dGxlU2Nyb2xsIiwidV9zbGlkZURvd24iLCJ1X3NsaWRlVXAiLCJ0b2dnbGVTdWJtZW51Iiwic3VibWVudSIsImZpcnN0RWxlbWVudENoaWxkIiwiZXYiLCJqIiwibG9hZE1vcmVQb3N0cyIsInVfYWRkVG91Y2hUb0h0bWwiLCJUYWJBY2NvcmRpb24iLCJEU01QVGFiIiwiRFNNUFRhYnNUYWIiLCJEU01QVGFic0Ryb3Bkb3duIiwiRFNNUFRhYnNUYWJEcm9wZG93biIsIkRTTVBNZWRpYUNvbnRyb2xzIiwiUHVyZUNvdW50ZXIiLCJncmlkZGVySW5pdCIsInNjcm9sbEFuaW1hdGlvbnMiLCJ2aWRlb0hvdmVyIiwiZnVuayIsImRzQWpheCIsIm1hdGNoTWVkaWEiLCJtYXRjaGVzIiwibXlMYXp5TG9hZCIsIkxhenlMb2FkIiwiZWxlbWVudHNfc2VsZWN0b3IiLCJzcGVjaWFsIiwidG91Y2hzdGFydCIsInNldHVwIiwiXyIsIm5zIiwiaGFuZGxlIiwicGFzc2l2ZSIsInRvdWNobW92ZSIsIndoZWVsIiwibW91c2V3aGVlbCIsInRhYnNUYWJEcm9wIiwiZWFzZU91dFF1YWQiLCJ0IiwiYiIsImMiLCJkIiwiZWFzZUluUXVhZCIsImVhc2VJbk91dFF1YWQiLCJlYXNlSW5DdWJpYyIsImVhc2VPdXRDdWJpYyIsImVhc2VJbk91dEN1YmljIiwiZWFzZUluUXVhcnQiLCJlYXNlT3V0UXVhcnQiLCJlYXNlSW5PdXRRdWFydCIsImVhc2VJblF1aW50IiwiZWFzZU91dFF1aW50IiwiZWFzZUluT3V0UXVpbnQiLCJlYXNlSW5TaW5lIiwiY29zIiwiUEkiLCJlYXNlT3V0U2luZSIsInNpbiIsImVhc2VJbk91dFNpbmUiLCJlYXNlSW5FeHBvIiwicG93IiwiZWFzZU91dEV4cG8iLCJlYXNlSW5PdXRFeHBvIiwiZWFzZUluQ2lyYyIsInNxcnQiLCJlYXNlT3V0Q2lyYyIsImVhc2VJbk91dENpcmMiLCJlYXNlSW5FbGFzdGljIiwicyIsInAiLCJhIiwiYWJzIiwiYXNpbiIsImVhc2VPdXRFbGFzdGljIiwiZWFzZUluT3V0RWxhc3RpYyIsImVhc2VJbkJhY2siLCJlYXNlT3V0QmFjayIsImVhc2VJbk91dEJhY2siLCJlYXNlSW5Cb3VuY2UiLCJlYXNlT3V0Qm91bmNlIiwiZWFzZUluT3V0Qm91bmNlIiwic2Nyb2xsVG9VdGlsIiwicGFyYW1zIiwidG8iLCJkdXJhdGlvbiIsImNhbGxiYWNrIiwiZWFzaW5nIiwic3RhcnQiLCJjbGllbnRUb3AiLCJjaGFuZ2UiLCJpbmNyZW1lbnQiLCJhbmltYXRlU2Nyb2xsIiwiZWFzaW5nVmFsdWUiLCJzY3JvbGxUbyIsImdyaWRkZXIiLCJncmlkZGVycyIsImdyaWRkZXJFeHBhbmRlciIsImdyaWQiLCJzY3JvbGxPZmZzZXQiLCJhbmltYXRpb25TcGVlZCIsImFuaW1hdGlvbkVhc2luZyIsInNob3dOYXYiLCJuZXh0VGV4dCIsInByZXZUZXh0IiwiY2xvc2VUZXh0Iiwib25TdGFydCIsIm9uQ29udGVudCIsIm9uQ2xvc2VkIiwiZGVmYXVsdHMiLCJlbmQiLCJvbmNlIiwiZGVjaW1hbHMiLCJsZWdhY3kiLCJjdXJyZW5jeSIsImN1cnJlbmN5c3ltYm9sIiwic2VwYXJhdG9yIiwic2VwYXJhdG9yc3ltYm9sIiwiY29uZmlnT3B0aW9ucyIsIk9iamVjdCIsImFzc2lnbiIsInJlZ2lzdGVyRXZlbnRMaXN0ZW5lcnMiLCJlbGVtZW50cyIsImludGVyc2VjdGlvblN1cHBvcnRlZCIsImludGVyc2VjdGlvbkxpc3RlbmVyU3VwcG9ydGVkIiwiaW50ZXJzZWN0T2JzZXJ2ZXIiLCJhbmltYXRlRWxlbWVudHMiLCJiaW5kIiwiYW5pbWF0ZUxlZ2FjeSIsIl90aGlzMiIsImNvbmZpZyIsInBhcnNlQ29uZmlnIiwiZWxlbWVudElzSW5WaWV3IiwiX3RoaXMzIiwiZWxtIiwiZWxlbWVudENvbmZpZyIsImZvcm1hdE51bWJlciIsImludGVyc2VjdGlvblJhdGlvIiwic3RhcnRDb3VudGVyIiwiX3RoaXM0IiwiaW5jcmVtZW50c1BlclN0ZXAiLCJjb3VudE1vZGUiLCJjdXJyZW50Q291bnQiLCJwYXJzZVZhbHVlIiwiY291bnRlcldvcmtlciIsIm5leHROdW0iLCJuZXh0TnVtYmVyIiwiY2xlYXJJbnRlcnZhbCIsIl90aGlzNSIsImJhc2VDb25maWciLCJjb25maWdWYWx1ZXMiLCJ0ZXN0IiwibnVtYmVyIiwic3RlcHMiLCJtb2RlIiwiY29udmVydFRvQ3VycmVuY3lTeXN0ZW0iLCJzeW1ib2wiLCJsaW1pdCIsImFwcGx5U2VwYXJhdG9yIiwiUmVnRXhwIiwic3RyQ29uZmlnIiwibWluaW11bUZyYWN0aW9uRGlnaXRzIiwibWF4aW11bUZyYWN0aW9uRGlnaXRzIiwidG9Mb2NhbGVTdHJpbmciLCJvZmZzZXRUb3AiLCJvZmZzZXRQYXJlbnQiLCJwYWdlWE9mZnNldCIsImlubmVySGVpZ2h0IiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSIsInVfZXh0ZW5kT2JqZWN0Iiwid3JhcHBlciIsIm92ZXJsYXkiLCJtdXRlIiwiY2xvc2UiLCJjbGFzc2VzIiwicGxheWluZyIsInNvdW5kIiwicGFyZW50UGxheSIsInBhcmVudFBhdXNlIiwidHJpZ2dlckF1dG9wbGF5Iiwic2VsZiIsImJpbmRUb2dnbGVQbGF5IiwiYmluZFRvZ2dsZU11dGUiLCJiaW5kRW5kZWRWaWRlbyIsImVuZGVkVmlkZW8iLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJ2aWRlbyIsInZpZGVvQ29udGFpbmVyIiwiYnRuUGxheSIsImJ0bk11dGUiLCJzdGFydFBsYXkiLCJjdXJyZW50VGFyZ2V0IiwicGFyZW50V3JhcCIsInZpZGVPdmVybGF5Iiwic3RvcFBsYXkiLCJpc0VmZmVjdE9uIiwib3B0aW9uc0Rlc2t0b3AiLCJvcHRpb25zTW9iaWxlIiwic2xpZGVDbGFzcyIsIm9wdGlvbnNOYXYiLCJzbGlkZXJObyIsInNsaWRlck5hbWUiLCJzbGlkZXJNb2JpbGVOYW1lIiwic2xpZGVyU2VsIiwic2xpZGVyTW9iaWxlU2VsIiwic2xpZGVyRWxlbSIsInNsaWRlck1vYmlsZUVsZW0iLCJzaG93TW9iaWxlIiwiaXNNb2JpbGUiLCJpc0Rlc2t0b3AiLCJkZXNrdG9wSW5zdGFuY2UiLCJtb2JpbGVJbnN0YW5jZSIsImRlc2t0b3BUYWJzIiwicGFyc2VPcHRpb25zIiwiY3JlYXRlTW9iaWxlIiwiY3JlYXRlRGVza3RvcCIsInRocm90dGxlUmVzaXplIiwicmVzaXplU2xpZGVyIiwiYmFzZW5hbWUiLCJ1bmJpbmRUYWJzIiwiaXNBdXRvcGxheSIsImlzQXV0b3BsYXlEZWxheSIsIm5vQ29sdW1ucyIsImNvbHVtbnNHYXAiLCJpc0VmZmVjdCIsImZhZGVFZmZlY3QiLCJjcm9zc0ZhZGUiLCJwcmVsb2FkSW1hZ2VzIiwibGF6eSIsImxvYWRQcmV2TmV4dCIsImxvYWRPblRyYW5zaXRpb25TdGFydCIsImlzTG9vcCIsImN1cnJlbnRJRCIsIm5leHRJRCIsInByZXZJRCIsInNsaWRlck5leHQiLCJzbGlkZXJQcmV2IiwiaXNOYXZpZ2F0aW9uIiwic2xpZGVUb0NsaWNlZFNsaWRlIiwidV9pc1RvdWNoRGV2aWNlIiwiaXNUb3VjaCIsInRhYkNsaWNrZWQiLCJ0YWJDbGljayIsInN3aXBlclNsaWRlQ2hhbmdlIiwiYmluZFRhYnMiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY3VycmVudFRhYiIsImNsaWNrZWRUYWIiLCJ0YWJDaGFuZ2UiLCJ1X2ZhZGVJbiIsInVfZmFkZU91dCIsInNlbGVjdG9ycyIsImdhbGxlcnkiLCJjb250YWluZXIiLCJhbmltYXRpb24iLCJzdGFydENsb3NlZCIsImFuaW1hdGlvbkNvbnRlbnQiLCJhbmltYXRpb25HYWxsZXJ5Iiwic2Nyb2xsVG9WaWV3Iiwib3B0IiwiZXhwYW5kIiwiaGFzR2FsbGVyeSIsImFyaWEiLCJnZXRBcmlhTmFtZSIsImV2ZW50c0xpc3RlbmVycyIsImdhbGxlcnlJdGVtcyIsImhhbmRsZXJzIiwicHJldmlvdXNJbmRleCIsImN1cnJlbnRJbmRleCIsImFkZEFyaWEiLCJwcmVwYXJlRm9yQW5pbWF0aW9uIiwiYWNjb3JkaW9uQmluZEV2ZW50cyIsImV2ZW50cyIsIm9mZiIsImhhbmRsZXIiLCJldmVudEhhbmRsZXIiLCJzcGxpY2UiLCJlbWl0IiwiY29udGV4dCIsIl9sZW4iLCJhcmdzIiwiX2tleSIsImlzQXJyYXkiLCJ1bnNoaWZ0IiwiZXZlbnRzQXJyYXkiLCJhcHBseSIsImFkZExpc3RlbmVyRm9jdXMiLCJhZGRMaXN0ZW5lckJsdXIiLCJhZGRLZXlMaXN0ZW5lciIsImhhbmRsZXJGdW5jIiwiYWNjb3JkaW9uTmF2Q2xpY2siLCJhY2NvcmRpb24iLCJhY2NvcmRpb25VbmJpbmRFdmVudHMiLCJlbGVtUGFyZW50IiwiZWxlbUNvbnRlbnQiLCJoZWFkZXIiLCJyZW1vdmVTdHlsZXMiLCJjdXJyZW50SXRlbUNsaWNrZWQiLCJhY2NvcmRpb25Db250ZW50Y2hhbmdlIiwiZWxlbXMiLCJjdXJyZW50SXRlbSIsImN1cnJlbnRJdGVtQ29udGVudCIsImV4cGFuZGVkIiwiaXRlbUNvbnRlbnQiLCJpdGVtVHJpZ2dlciIsImFjY29yZGlvbkNoYW5nZUdhbGxlcnkiLCJzY3JvbGxUb0FjY29yZGlvbiIsIm5leHRBY2NvcmRpb24iLCJuZXh0RWxlbSIsIm51bWJlck9mRWxlbSIsIm5leHRFbGVtSXRlbSIsInByZXZBY2NvcmRpb24iLCJwcmV2RWxlbSIsInByZXZFbGVtSXRlbSIsImNvbXBsZXRlIiwibmV3SXRlbSIsImFjdGl2ZUZvdW5kIiwibGlzdCIsIml0ZW0wQ29udGVudCIsImlzU2VsZkNsb3NlIiwiaXNMZWF2ZU9wZW4iLCJpc1N0YXJ0Q2xvc2VkIiwiaXNHYWxsZXJ5IiwiYW5pbWF0ZUNvbnRlbnQiLCJhbmltYXRlR2FsbGVyeSIsImlzU2Nyb2xsVG9WaWV3IiwiaXNWYWxpZElkIiwiYXJpYU5hbWUiLCJ3aGljaCIsInRvU3RyaW5nIiwidHJpZ2dlcnMiLCJ0cmlnZ2VyQ2xhc3MiLCJjdHJsTW9kaWZpZXIiLCJjdHJsS2V5IiwibmV3SW5kZXgiLCJzY3JvbGxDdXJyZW50Q29udGVudCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImVsZW1IZWlnaHQiLCJjdXJyZW50U2Nyb2xsUG9zIiwiRFNNUFRhYnNDbGFzcyIsIl9EU01QVGFic0NsYXNzIiwiX2NhbGxTdXBlciIsImRyb3Bkb3duIiwic2VsZWN0b3JEcm9wZG93biIsIml0ZW1zRHJvcGRvd24iLCJfaW5oZXJpdHMiLCJiaW5kRnVuY3Rpb25zIiwiYmluZFRhYnNEcm9wZG93bkV2ZW50IiwidGFiRHJvcGRvd25DaGFuZ2UiLCJkcm9wZG93bnMiLCJjdXJyRHJvcGRvd24iLCJjdXJyZW50VGFiSUQiLCJfZ2V0IiwiX2dldFByb3RvdHlwZU9mIiwidW5iaW5kVGFic0Ryb3Bkb3duRXZlbnQiLCJuYXYiLCJzZWxlY3RvclRhYnMiLCJpbml0VGFic0Ryb3Bkb3duIiwiYmluZFRhYk5hdkV2IiwidGFiTmF2Q2xpY2siLCJjdXJyZW50U2VsZWN0b3IiLCJjdXJyZW50RHJvcGRvd24iLCJ1cGRhdGVUYWJOYXYiLCJ1cGRhdGVEcm9wZG93biIsImN1cnJlbnROYXZJdGVtIiwiY3VycmVudERyb3AiLCJuZXdEcm9wSW5kZXgiLCJjdXJyVGFiIiwiY3VyclRhYkluZGV4IiwiYWN0aXZlTmF2IiwidW5iaW5kVGFic0Ryb3BFdmVudHMiLCJhY3RpdmVQYW5lbCIsImJpbmRUYWJOYXZFdmVudCIsInVuYmluZFRhYk5hdkV2ZW50IiwiZ2V0TmF2VGFiSUQiLCJjbGVhckFjdGl2ZUNsYXNzIiwic2V0QWN0aXZlQ2xhc3MiLCJ0YWJQYW5lbENoYW5nZSIsImN1cnJlbnRQYW5lbElEIiwiY3VycmVudFBhbmVsIiwiY3VycmVudFBhbmVsSG9sZGVyIiwiZGF0YUlEIiwic2VjdGlvbiIsInNldEZpcnN0QWN0aXZlIiwidGFiT3B0aW9ucyIsImFjY29yZGlvbkluc3RhbmNlIiwidGFiSW5zdGFuY2UiLCJidWlsZEFjY29yZGlvbiIsImJ1aWxkVGFiIiwiYnVpbGRUYWJBY2NvcmRpb24iLCJrZXlzIiwiaG9tZSIsInVwIiwiZG93biIsImRlbGV0ZSIsImVudGVyIiwic3BhY2UiLCJrZXlzRGlyZWN0aW9uIiwidV9pc0VsZW1lbnRJc0luVmlldyIsImFvcyIsIm1vYmlsZVNlbGVjdG9yIiwiaXRlbXNNb2JpbGUiLCJiaW5kQ2hhbmdlVGFiIiwiY2hhbmdlVGFiIiwiYmluZENoYW5nZVNsaWRlIiwiY2hhbmdlU2xpZGUiLCJiaW5kU2Nyb2xsQWNjb3JkaW9uIiwic2Nyb2xsQWNjb3JkaW9uIiwiYmluZFJlc2l6ZUFjY29yZGlvbiIsInJlc2l6ZUFjY29yZGlvbiIsInRocm90bGVSZXNpemVBY2NvcmRpb24iLCJ0aHJvdGxlQWNjb3JkaW9uU2Nyb2xsIiwidGFiSXRlbSIsImN1cnJlbnRMaXN0IiwidGFiYmVkIiwiY3VycmVudENvbnRlbnQiLCJpc0N1cnJlbnQiLCJlbGVtSXRlbSIsImN1cnJlbnRMZW5ndGgiLCJjdXJyZW50IiwidGFic0VsZW0iLCJkb25lIiwibmV3UG9zdHMiLCJhZGREZWxheWVkQ2xhc3MiLCJwYWdlZCIsImF1dGhvciIsImJ1dHRvbldyYXBwZXIiLCJub25jZSIsImRzIiwiY3VycmVudFBhZ2UiLCJhamF4X3VybCIsInBvc3RzIiwidGFiSXRlbXMiLCJrZXlDb2RlIiwiZ3JpZGRlckxpc3RJdGVtcyIsInVfaGFzQ2xhc3MiLCJjbHMiLCJ1X2FkZENsYXNzIiwidV9kZWxDbGFzcyIsInVfZWxlbWVudEZyb21Ub3AiLCJlbGVtVHJpZ2dlciIsImVsZW1UYXJnZXQiLCJjbGFzc1RvQWRkIiwiZGlzdGFuY2VGcm9tVG9wIiwidW5pdCIsIndpblkiLCJlbFRyaWdnZXJMZW5ndGgiLCJlbFRhcmdldExlbmd0aCIsImRpc3RUb3AiLCJkaXN0UGVyY2VudCIsImRpc3RQaXhlbHMiLCJkaXN0VW5pdCIsInNjcm9sbFkiLCJib3VuZHNUb3AiLCJ2aWV3cG9ydCIsImJvdHRvbSIsImJvdW5kcyIsImFuaW1hdGVGYWRlIiwidGltZVBhc3NlZCIsImRlbHRhIiwic3RlcCIsImVhc2luZ3MiLCJzd2luZyIsImxpbmVhciIsInF1YWRyYXRpYyIsImNpcmMiLCJhY29zIiwiYmFjayIsIngiLCJib3VuY2UiLCJlbGFzdGljIiwiRG9jdW1lbnRUb3VjaCIsImlzVG91Y2hIdG1sVXRpbCIsInRvdWNoIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJ0aHJvdHRsZUlzVG91Y2giLCJkZXN0aW5hdGlvbiIsInNvdXJjZSIsInByb3BlcnR5IiwiY29uc3RydWN0b3IiLCJ1X2V4dGVuZCIsImV4dGVuZGVkT3B0aW9ucyIsInVfbWVyZ2VEZWVwIiwiaXNPYmplY3QiLCJfdHlwZW9mIiwidGFyZ2V0VmFsdWUiLCJzb3VyY2VWYWx1ZSIsInVfaXNJbnRlZ2VyIiwic3RhcnRWYWx1ZSIsImRpZmZWYWx1ZSIsImR1cmVhdGlvbiIsImRpcmVjdGlvbnMiLCJPUEVOIiwiQ0xPU0UiLCJkaXNwbGF5VHlwZSIsInN0YXJ0aW5nSGVpZ2h0IiwiZGlzdGFuY2VIZWlnaHQiLCJzZXRFbGVtZW50QW5pbWF0aW9uU3R5bGVzIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwidGltZXN0YW1wIiwibm93Iiwic3RhcnRUaW1lIiwiYW5pbWF0aW9uQ29udGludWUiLCJuZXdIZWlnaHQiLCJyZW1vdmVFbGVtZW50QW5pbWF0aW9uU3R5bGVzIiwib3ZlcmZsb3ciLCJtYXJnaW5Ub3AiLCJtYXJnaW5Cb3R0b20iLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSIsInVfc2xpZGVUb2dnbGUiLCJnZXRDb21wdXRlZFN0eWxlIiwiaXNJbnRlZ2VyIiwiaXNGaW5pdGUiLCJmbG9vciIsInVfaXNPYmplY3QiLCJvIiwic3RyIiwiaXNOYU4iLCJ1X2RlYm91bmNlZCIsImZ1bmMiLCJpbW1lZGlhdGUiLCJ0aW1lcklkIiwiYm91bmRGdW5jIiwiY2xlYXJUaW1lb3V0IiwiY2FsbGVlRnVuYyIsIl9sZW4yIiwiX2tleTIiLCJoYW5kbGVJbnRlcnNlY3QiLCJjcmVhdGVPYnNlcnZlciIsIm9wdGlvbnMxIiwib3B0aW9uczIiLCJyb290TWFyZ2luIiwib3B0aW9uczMiLCJvbmxvYWQiLCJ2aWRzIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsIl9sb29wIiwidmlkc0l0ZW0iXSwic291cmNlUm9vdCI6IiJ9