/******/ (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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFPLFNBQVNBLFFBQVFBLENBQUEsRUFBRztFQUV2QixJQUFHQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQ0MsTUFBTSxFQUFDO0lBRTNCQyxXQUFXLENBQUMsWUFBVTtNQUNsQixJQUFJQyxjQUFjLEdBQUdILENBQUMsQ0FBQyw4QkFBOEIsQ0FBQztNQUN0RCxJQUFJSSxhQUFhLEdBQUdKLENBQUMsQ0FBQywwQkFBMEIsQ0FBQztNQUVqRCxJQUFJRyxjQUFjLENBQUNFLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFDL0JELGFBQWEsQ0FBQ0UsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUV0QkgsY0FBYyxDQUFDSSxJQUFJLENBQUMsQ0FBQyxDQUFDRCxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0VBQ1o7QUFDSjs7Ozs7Ozs7Ozs7Ozs7QUNkQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTyxTQUFTRSxXQUFXQSxDQUFDQyxFQUFFLEVBQUVDLFFBQVEsRUFBRTtFQUV0QyxJQUFNQyxHQUFHLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDSixFQUFFLENBQUM7RUFDdEMsSUFBTUssTUFBTSxHQUFHRixRQUFRLENBQUNDLGFBQWEsQ0FBQ0osRUFBRSxDQUFDO0VBRXpDLElBQUlFLEdBQUcsRUFBRTtJQUVMLElBQU1JLFNBQVMsR0FBR0gsUUFBUSxDQUFDQyxhQUFhLENBQUNILFFBQVEsQ0FBQztJQUNsRCxJQUFNTSxVQUFVLEdBQUdELFNBQVMsQ0FBQ0YsYUFBYSxDQUFDLFNBQVMsQ0FBQztJQUVyRCxJQUFJSSxZQUFZLEdBQUdGLFNBQVMsQ0FBQ0csZ0JBQWdCLENBQUMsMEJBQTBCLENBQUM7SUFFekVELFlBQVksQ0FBQ0UsT0FBTyxDQUFDLFVBQVVDLElBQUksRUFBRUMsS0FBSyxFQUFDO01BQ3ZDLElBQUlDLGVBQWUsR0FBR0YsSUFBSSxDQUFDUCxhQUFhLENBQUMsa0JBQWtCLENBQUM7TUFDNUQsSUFBSVUsTUFBTSxHQUFHSCxJQUFJLENBQUNQLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQ1csWUFBWTtNQUVuREYsZUFBZSxDQUFDRyxLQUFLLENBQUNDLFNBQVMsTUFBQUMsTUFBQSxDQUFNSixNQUFNLE9BQUk7SUFDbkQsQ0FBQyxDQUFDO0lBRUZaLEdBQUcsQ0FBQ2lCLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxVQUFBQyxLQUFLLEVBQUk7TUFDbkNBLEtBQUssQ0FBQ0MsY0FBYyxDQUFDLENBQUM7TUFDdEIsSUFBSWIsWUFBWSxHQUFHRixTQUFTLENBQUNGLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQztNQUN0RSxJQUFJVSxNQUFNLEdBQUdOLFlBQVksQ0FBQ0osYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDVyxZQUFZO01BQzNELElBQUlPLE1BQU0sR0FBR2hCLFNBQVMsQ0FBQ0YsYUFBYSxDQUFDLDRCQUE0QixDQUFDO01BQ2xFLElBQUlFLFNBQVMsQ0FBQ2lCLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1FBQzNDbEIsU0FBUyxDQUFDaUIsU0FBUyxDQUFDRSxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ3ZDbEIsVUFBVSxDQUFDbUIsY0FBYyxDQUFDO1VBQUdDLEtBQUssRUFBRTtRQUFRLENBQUMsQ0FBQztRQUM5Q0MsVUFBVSxDQUFDLFlBQU07VUFDYk4sTUFBTSxDQUFDTixLQUFLLENBQUNGLE1BQU0sR0FBRyxNQUFNO1FBQ2hDLENBQUMsRUFBRSxJQUFJLENBQUM7TUFFWixDQUFDLE1BQU07UUFDSFIsU0FBUyxDQUFDaUIsU0FBUyxDQUFDTSxHQUFHLENBQUMsV0FBVyxDQUFDO1FBQ3BDUCxNQUFNLENBQUNOLEtBQUssQ0FBQ0YsTUFBTSxNQUFBSSxNQUFBLENBQU1KLE1BQU0sT0FBSTtNQUN2QztJQUNKLENBQUMsQ0FBQztFQUVOO0FBQ0o7Ozs7Ozs7Ozs7Ozs7OztBQzNDTyxTQUFTZ0IsYUFBYUEsQ0FBQSxFQUFHO0VBQzVCdkMsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLENBQUN3QyxJQUFJLENBQUMsWUFBWTtJQUMxQ3hDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ00sS0FBSyxDQUFDLFlBQVk7TUFDdEIsSUFBSU4sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDSyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDeEJMLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3lDLE1BQU0sQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxDQUFDLENBQUNDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1FBQzdDM0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDNEMsV0FBVyxDQUFDLElBQUksQ0FBQztNQUM3QixDQUFDLE1BQU07UUFDSCxJQUFJckIsTUFBTSxHQUFHdkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDeUMsTUFBTSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLENBQUMsQ0FBQ0csSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUNDLFdBQVcsQ0FBQyxDQUFDO1FBQzFFOUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDeUMsTUFBTSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLENBQUMsQ0FBQ0MsR0FBRyxDQUFDLFlBQVksRUFBRXBCLE1BQU0sQ0FBQztRQUNqRHZCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQytDLFFBQVEsQ0FBQyxJQUFJLENBQUM7TUFDMUI7SUFDSixDQUFDLENBQUM7RUFDTixDQUFDLENBQUM7QUFDTjs7Ozs7Ozs7Ozs7Ozs7QUNiTyxTQUFTQyxTQUFTQSxDQUFDdkMsRUFBRSxFQUFFO0VBQzFCLElBQU1FLEdBQUcsR0FBR0MsUUFBUSxDQUFDcUMsY0FBYyxDQUFDeEMsRUFBRSxDQUFDO0VBRXZDLElBQUdFLEdBQUcsRUFBRTtJQUNKQSxHQUFHLENBQUNpQixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsWUFBTTtNQUNoQ3NCLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDO1FBQ1ZDLEdBQUcsRUFBRSxDQUFDO1FBQ05DLElBQUksRUFBRSxDQUFDO1FBQ1BDLFFBQVEsRUFBRTtNQUNkLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztFQUNOO0FBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDWk1DLG1CQUFtQjtFQUNyQixTQUFBQSxvQkFBQSxFQUFjO0lBQUFDLGVBQUEsT0FBQUQsbUJBQUE7SUFDVixJQUFJLENBQUNFLFdBQVcsR0FBRyxxQkFBcUI7SUFDeEMsSUFBSSxDQUFDQyxlQUFlLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDM0IsSUFBSSxDQUFDQyxlQUFlLEdBQUcsMEJBQTBCO0lBQ2pELElBQUksQ0FBQ0MsWUFBWSxHQUFHLHFCQUFxQjtJQUV6QyxJQUFJLENBQUNDLElBQUksQ0FBQyxDQUFDO0VBQ2Y7RUFBQyxPQUFBQyxZQUFBLENBQUFQLG1CQUFBO0lBQUFRLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFILEtBQUEsRUFBTztNQUFBLElBQUFJLHFCQUFBO1FBQUFDLEtBQUE7TUFDSDtNQUNBLElBQUksSUFBSSxDQUFDQyxVQUFVLENBQUMsSUFBSSxDQUFDVixXQUFXLENBQUMsRUFBRTtRQUNuQyxJQUFJLENBQUNXLFFBQVEsQ0FBQyxDQUFDO01BQ25CLENBQUMsTUFBTTtRQUNILElBQUksQ0FBQ0MsUUFBUSxDQUFDLENBQUM7TUFDbkI7O01BRUE7TUFDQSxDQUFBSixxQkFBQSxHQUFBckQsUUFBUSxDQUFDQyxhQUFhLENBQUMsSUFBSSxDQUFDOEMsZUFBZSxDQUFDLGNBQUFNLHFCQUFBLGVBQTVDQSxxQkFBQSxDQUE4Q3JDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxVQUFDMEMsQ0FBQyxFQUFLO1FBQzNFQSxDQUFDLENBQUN4QyxjQUFjLENBQUMsQ0FBQztRQUNsQm9DLEtBQUksQ0FBQ0ssVUFBVSxDQUFDTCxLQUFJLENBQUNULFdBQVcsRUFBRSxNQUFNLEVBQUVTLEtBQUksQ0FBQ1IsZUFBZSxDQUFDO1FBQy9EUSxLQUFJLENBQUNFLFFBQVEsQ0FBQyxDQUFDO01BQ25CLENBQUMsQ0FBQztJQUNOO0VBQUM7SUFBQUwsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQUksU0FBQSxFQUFXO01BQ1AsSUFBTUksR0FBRyxHQUFHNUQsUUFBUSxDQUFDQyxhQUFhLENBQUMsSUFBSSxDQUFDK0MsWUFBWSxDQUFDO01BQ3JELElBQUlZLEdBQUcsRUFBRTtRQUNMQSxHQUFHLENBQUN4QyxTQUFTLENBQUNNLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQztNQUM1QztJQUNKO0VBQUM7SUFBQXlCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFLLFNBQUEsRUFBVztNQUNQLElBQU1HLEdBQUcsR0FBRzVELFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLElBQUksQ0FBQytDLFlBQVksQ0FBQztNQUNyRCxJQUFJWSxHQUFHLEVBQUU7UUFDTEEsR0FBRyxDQUFDeEMsU0FBUyxDQUFDRSxNQUFNLENBQUMscUJBQXFCLENBQUM7TUFDL0M7SUFDSjtFQUFDO0lBQUE2QixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBTyxXQUFXRSxJQUFJLEVBQUVULEtBQUssRUFBRVUsSUFBSSxFQUFFO01BQzFCLElBQU1DLElBQUksR0FBRyxJQUFJQyxJQUFJLENBQUMsQ0FBQztNQUN2QkQsSUFBSSxDQUFDRSxPQUFPLENBQUNGLElBQUksQ0FBQ0csT0FBTyxDQUFDLENBQUMsR0FBSUosSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUssQ0FBQztNQUMzRDlELFFBQVEsQ0FBQ21FLE1BQU0sTUFBQXBELE1BQUEsQ0FBTThDLElBQUksT0FBQTlDLE1BQUEsQ0FBSXFDLEtBQUssZ0JBQUFyQyxNQUFBLENBQWFnRCxJQUFJLENBQUNLLFdBQVcsQ0FBQyxDQUFDLGFBQVU7SUFDL0U7RUFBQztJQUFBakIsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQUcsV0FBV00sSUFBSSxFQUFFO01BQ2IsSUFBTVQsS0FBSyxRQUFBckMsTUFBQSxDQUFRZixRQUFRLENBQUNtRSxNQUFNLENBQUU7TUFDcEMsSUFBTUUsS0FBSyxHQUFHakIsS0FBSyxDQUFDa0IsS0FBSyxNQUFBdkQsTUFBQSxDQUFNOEMsSUFBSSxNQUFHLENBQUM7TUFDdkMsSUFBSVEsS0FBSyxDQUFDaEYsTUFBTSxLQUFLLENBQUMsRUFBRSxPQUFPZ0YsS0FBSyxDQUFDRSxHQUFHLENBQUMsQ0FBQyxDQUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUNFLEtBQUssQ0FBQyxDQUFDO01BQzdELE9BQU8sSUFBSTtJQUNmO0VBQUM7QUFBQTtBQUdMLCtEQUFlN0IsbUJBQW1COzs7Ozs7Ozs7Ozs7OztBQ3REbEMsSUFBTThCLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUEsRUFBUztFQUNoQyxJQUFNQyxnQkFBZ0IsR0FBRzFFLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLGlCQUFpQixDQUFDO0VBRWxFLElBQUksQ0FBQ3lFLGdCQUFnQixFQUFFO0VBRXZCLElBQU1DLGNBQWMsR0FBRzNFLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLHdCQUF3QixDQUFDO0VBQ3ZFLElBQU0yRSxjQUFjLEdBQUc1RSxRQUFRLENBQUNDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQztFQUN2RSxJQUFNNEUsYUFBYSxHQUFHN0UsUUFBUSxDQUFDcUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDO0VBRWhFc0MsY0FBYyxDQUFDM0QsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFlBQU07SUFDM0MsSUFBSTZELGFBQWEsQ0FBQ3pCLEtBQUssS0FBSyxFQUFFLEVBQUU7TUFDNUJ5QixhQUFhLENBQUN6QixLQUFLLEdBQUcsQ0FBQztJQUMzQixDQUFDLE1BQU07TUFDSHlCLGFBQWEsQ0FBQ3pCLEtBQUssR0FBRzBCLFFBQVEsQ0FBQ0QsYUFBYSxDQUFDekIsS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUMzRDtFQUNKLENBQUMsQ0FBQztFQUVGd0IsY0FBYyxDQUFDNUQsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFlBQU07SUFDM0MsSUFBSTZELGFBQWEsQ0FBQ3pCLEtBQUssS0FBSyxFQUFFLEVBQUU7TUFDNUJ5QixhQUFhLENBQUN6QixLQUFLLEdBQUcsQ0FBQztJQUMzQixDQUFDLE1BQU0sSUFBSTBCLFFBQVEsQ0FBQ0QsYUFBYSxDQUFDekIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO01BQzFDeUIsYUFBYSxDQUFDekIsS0FBSyxHQUFHMEIsUUFBUSxDQUFDRCxhQUFhLENBQUN6QixLQUFLLENBQUMsR0FBRyxDQUFDO0lBQzNEO0VBQ0osQ0FBQyxDQUFDO0FBR04sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxQk0sU0FBUzJCLGVBQWVBLENBQUEsRUFBRztFQUM5QjtFQUNBLElBQUlDLFFBQVEsR0FBR2hGLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLFlBQVksQ0FBQztFQUVuRCxJQUFJK0UsUUFBUSxFQUFFO0lBQUEsSUFFREMsT0FBTyxHQUFoQixTQUFTQSxPQUFPQSxDQUFBLEVBQUU7TUFDZCxJQUFJQyxZQUFZLEdBQUdsRixRQUFRLENBQUNNLGdCQUFnQixDQUFDLDRCQUE0QixDQUFDO01BRTFFNEUsWUFBWSxDQUFDM0UsT0FBTyxDQUFDLFVBQVU0RSxNQUFNLEVBQUU7UUFDbkM7UUFDQSxJQUFJQyxVQUFVLEdBQUdwRixRQUFRLENBQUNxRixhQUFhLENBQUMsS0FBSyxDQUFDO1FBQzdDO1FBQ0RELFVBQVUsQ0FBQ2hFLFNBQVMsQ0FBQ00sR0FBRyxDQUFDLGFBQWEsQ0FBQzs7UUFFdkM7UUFDQXlELE1BQU0sQ0FBQ0csVUFBVSxDQUFDQyxZQUFZLENBQUNILFVBQVUsRUFBRUQsTUFBTSxDQUFDO1FBQ2xEQyxVQUFVLENBQUNJLFdBQVcsQ0FBQ0wsTUFBTSxDQUFDO01BQ2xDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFrREQ7SUFBQSxJQUNTTSxxQkFBcUIsR0FBOUIsU0FBU0EscUJBQXFCQSxDQUFDQyxVQUFVLEVBQUU7TUFDdkMsSUFBTUMsUUFBUSxHQUFHM0YsUUFBUSxDQUFDcUMsY0FBYyxDQUFDcUQsVUFBVSxDQUFDO01BQ3BEQyxRQUFRLENBQUNyRixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLFVBQUFxRixLQUFLLEVBQUk7UUFFaEQ7UUFDQSxJQUFNQyxZQUFZLEdBQUdGLFFBQVEsQ0FBQzFGLGFBQWEsQ0FBQyw2QkFBNkIsQ0FBQztRQUMxRSxJQUFNNkYsS0FBSyxHQUFHSCxRQUFRLENBQUMxRixhQUFhLGdCQUFBYyxNQUFBLENBQWU4RSxZQUFZLENBQUNFLEVBQUUsUUFBSSxDQUFDO1FBQ3ZFLElBQU1DLFNBQVMsR0FBR0YsS0FBSyxDQUFDRyxXQUFXLENBQUNDLElBQUksQ0FBQyxDQUFDO1FBQzFDQyxlQUFlLENBQUNULFVBQVUsQ0FBQyxHQUFHTSxTQUFTOztRQUV2QztRQUNBSixLQUFLLENBQUM1RSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsVUFBU0MsS0FBSyxFQUFFO1VBQzdDLElBQU1tRixPQUFPLEdBQUduRixLQUFLLENBQUNvRixNQUFNLENBQUNOLEVBQUU7VUFDL0IsSUFBTUQsS0FBSyxHQUFHOUYsUUFBUSxDQUFDQyxhQUFhLGdCQUFBYyxNQUFBLENBQWVxRixPQUFPLFFBQUksQ0FBQztVQUMvRCxJQUFNRSxjQUFjLEdBQUdSLEtBQUssQ0FBQ0csV0FBVyxDQUFDQyxJQUFJLENBQUMsQ0FBQztVQUMvQ0MsZUFBZSxDQUFDVCxVQUFVLENBQUMsR0FBR1ksY0FBYyxDQUFDLENBQUM7VUFDOUNDLE9BQU8sQ0FBQ0MsR0FBRyx1QkFBQXpGLE1BQUEsQ0FBdUIyRSxVQUFVLFFBQUEzRSxNQUFBLENBQUt1RixjQUFjLENBQUUsQ0FBQztRQUN0RSxDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7SUFDTixDQUFDLEVBRUQ7SUFBQSxJQVFTRyxTQUFTLEdBQWxCLFNBQVNBLFNBQVNBLENBQUEsRUFBRztNQUNqQjtNQUNBLElBQU1DLGNBQWMsR0FBR0MsT0FBTyxDQUFDQyxPQUFPLENBQUNELE9BQU8sQ0FBQ0UsYUFBYSxDQUFDLENBQUNDLFNBQVM7TUFDdkUsSUFBTUMsU0FBUyxHQUFHQyxNQUFNLENBQUM1RCxLQUFLO01BQzlCLElBQU02RCxRQUFRLEdBQUlDLEtBQUssQ0FBQzlELEtBQUs7O01BRTdCO01BQ0EsSUFBTStELFNBQVMsR0FBRyxDQUFDLENBQUM7TUFDcEJDLFNBQVMsQ0FBQzdHLE9BQU8sQ0FBQyxVQUFBb0YsUUFBUSxFQUFJO1FBQzFCLElBQU1ELFVBQVUsR0FBR0MsUUFBUSxDQUFDSSxFQUFFO1FBQzlCLElBQU1zQixVQUFVLEdBQUcxQixRQUFRLENBQUMxRixhQUFhLENBQUMsUUFBUSxDQUFDLENBQUNnRyxXQUFXLENBQUNDLElBQUksQ0FBQyxDQUFDO1FBQ3RFLElBQU1vQixlQUFlLEdBQUdELFVBQVUsQ0FBQ0UsT0FBTyxDQUFDLHFCQUFxQixFQUFFLFVBQUNDLEtBQUssRUFBRUMsR0FBRyxFQUFLO1VBQzlFLE9BQU9BLEdBQUcsR0FBR0EsR0FBRyxDQUFDQyxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUU7UUFDdkMsQ0FBQyxDQUFDLENBQUNILE9BQU8sQ0FBQyxJQUFJLEVBQUUsVUFBQ0MsS0FBSztVQUFBLE9BQUtBLEtBQUssQ0FBQ0csV0FBVyxDQUFDLENBQUM7UUFBQSxFQUFDO1FBQ2hEUixTQUFTLENBQUNHLGVBQWUsQ0FBQyxHQUFHbkIsZUFBZSxDQUFDVCxVQUFVLENBQUMsSUFBSSx5QkFBeUI7TUFDekYsQ0FBQyxDQUFDO01BQ0Y7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0FwRCxNQUFNLENBQUNzRixTQUFTLEdBQUd0RixNQUFNLENBQUNzRixTQUFTLElBQUksRUFBRTtNQUN6Q3RGLE1BQU0sQ0FBQ3NGLFNBQVMsQ0FBQ0MsSUFBSSxDQUFBQyxhQUFBO1FBQ2pCLE9BQU8sRUFBRUMsS0FBSztRQUNkLGFBQWEsRUFBRXJCLGNBQWM7UUFBRTtRQUMvQixjQUFjLEVBQUVLLFNBQVM7UUFBRTtRQUMzQixZQUFZLEVBQUVFO01BQVEsR0FDbkJFLFNBQVMsQ0FDZixDQUFDO0lBQ04sQ0FBQztJQTNHRGEsTUFBTSxDQUFDaEksUUFBUSxDQUFDLENBQUNpSSxFQUFFLENBQUMsbUJBQW1CLEVBQUUsVUFBU2hILEtBQUssRUFBRWlILE9BQU8sRUFBRUMsWUFBWSxFQUFDO01BQzNFO01BQ0EsSUFBSUEsWUFBWSxJQUFJLENBQUMsRUFBRTtRQUNuQmxELE9BQU8sQ0FBQyxDQUFDO1FBQ1R4RCxVQUFVLENBQUMsWUFBTTtVQUNickMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMrQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQzNDLENBQUMsRUFBRSxJQUFJLENBQUM7UUFDUlYsVUFBVSxDQUFDLFlBQU07VUFDYnJDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDK0MsUUFBUSxDQUFDLElBQUksQ0FBQztRQUMzQyxDQUFDLEVBQUUsR0FBRyxDQUFDO1FBQ1A7TUFDSixDQUFDLE1BQUssSUFBR2dHLFlBQVksSUFBSSxDQUFDLEVBQUM7UUFDdkJsRCxPQUFPLENBQUMsQ0FBQztRQUNUeEQsVUFBVSxDQUFDLFlBQU07VUFDYnJDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDK0MsUUFBUSxDQUFDLElBQUksQ0FBQztRQUMzQyxDQUFDLEVBQUUsR0FBRyxDQUFDO1FBQ1BWLFVBQVUsQ0FBQyxZQUFNO1VBQ2JyQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQytDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDM0MsQ0FBQyxFQUFFLEdBQUcsQ0FBQztNQUNYO0lBRUosQ0FBQyxDQUFDOztJQUVGO0lBQ0EsSUFBTWlHLFFBQVEsR0FBR3BJLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLGlDQUFpQyxDQUFDO0lBQzFFLElBQU1vSSxPQUFPLEdBQUdELFFBQVEsQ0FBQ0UsYUFBYSxDQUFDQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ2xEOztJQUdBO0lBQ0EsSUFBTUMsVUFBVSxHQUFHSCxPQUFPLENBQUNwSSxhQUFhLENBQUMsb0JBQW9CLENBQUM7O0lBRTlEO0lBQ0E7O0lBRUE7SUFDQSxJQUFNMEcsT0FBTyxHQUFHM0csUUFBUSxDQUFDcUMsY0FBYyxDQUFDLGFBQWEsQ0FBQztJQUN0RCxJQUFNMkUsTUFBTSxHQUFHaEgsUUFBUSxDQUFDcUMsY0FBYyxDQUFDLGFBQWEsQ0FBQztJQUNyRCxJQUFNNkUsS0FBSyxHQUFHbEgsUUFBUSxDQUFDcUMsY0FBYyxDQUFDLGFBQWEsQ0FBQzs7SUFFcEQ7SUFDQSxJQUFNb0csaUJBQWlCLEdBQUdKLE9BQU87SUFDakMsSUFBTWpCLFNBQVMsR0FBR3FCLGlCQUFpQixDQUFDbkksZ0JBQWdCLENBQUMsVUFBVSxDQUFDOztJQUVoRTtJQUNBLElBQU02RixlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBeUIxQmlCLFNBQVMsQ0FBQzdHLE9BQU8sQ0FBQyxVQUFBb0YsUUFBUSxFQUFJO01BQzFCLElBQU1ELFVBQVUsR0FBR0MsUUFBUSxDQUFDSSxFQUFFO01BQzlCTixxQkFBcUIsQ0FBQ0MsVUFBVSxDQUFDO0lBQ3JDLENBQUMsQ0FBQztJQUVGLElBQUlxQyxLQUFLLEdBQUcsRUFBRTtJQWtDZCxJQUFJUyxVQUFVLEVBQUU7TUFDWkEsVUFBVSxDQUFDeEgsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFlBQVk7UUFDN0MrRyxLQUFLLEdBQUcsK0JBQStCO1FBQ3ZDdEIsU0FBUyxDQUFDLENBQUM7TUFDZixDQUFDLENBQUM7SUFDTjtJQUVBdUIsTUFBTSxDQUFDaEksUUFBUSxDQUFDLENBQUNpSSxFQUFFLENBQUMsMkJBQTJCLEVBQUUsVUFBU2hILEtBQUssRUFBRXlILE1BQU0sRUFBQztNQUVwRSxJQUFJQSxNQUFNLElBQUksRUFBRSxJQUFNQSxNQUFNLElBQUksRUFBRyxFQUFFO1FBQ2pDWCxLQUFLLEdBQUcsZ0NBQWdDO1FBQ3hDdEIsU0FBUyxDQUFDLENBQUM7TUFDZjtJQUNKLENBQUMsQ0FBQztJQUdGLElBQU1rQyxjQUFjLEdBQUczRCxRQUFRLENBQUMxRSxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQztJQUVyRXFJLGNBQWMsQ0FBQ3BJLE9BQU8sQ0FBQyxVQUFDcUksT0FBTyxFQUFLO01BQ2hDLElBQU1DLElBQUksR0FBR0QsT0FBTyxDQUFDM0ksYUFBYSxDQUFDLDBCQUEwQixDQUFDO01BQzlELElBQU02SSxLQUFLLEdBQUdGLE9BQU8sQ0FBQzNJLGFBQWEsQ0FBQyxPQUFPLENBQUM7TUFFNUMsSUFBTThJLE9BQU8sR0FBRy9JLFFBQVEsQ0FBQ3FGLGFBQWEsQ0FBQyxNQUFNLENBQUM7TUFDOUMwRCxPQUFPLENBQUNDLFNBQVMsR0FBRyxnQkFBZ0I7TUFDcENILElBQUksQ0FBQ0ksT0FBTyxDQUFDRixPQUFPLENBQUM7TUFFckIsSUFBTUcsU0FBUyxHQUFHbEosUUFBUSxDQUFDcUYsYUFBYSxDQUFDLE1BQU0sQ0FBQztNQUNoRDZELFNBQVMsQ0FBQ0YsU0FBUyxHQUFHLGtCQUFrQjtNQUN4Q0gsSUFBSSxDQUFDTSxNQUFNLENBQUNELFNBQVMsQ0FBQztNQUV0QkEsU0FBUyxDQUFDbEksZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFlBQU07UUFDdEMsSUFBTW9JLFVBQVUsR0FBR0Msb0JBQW9CLENBQUNQLEtBQUssQ0FBQzFGLEtBQUssQ0FBQztRQUNwRCxJQUFNa0csTUFBTSxHQUFHRixVQUFVLEdBQUcsR0FBRztRQUMvQixJQUFNRyxTQUFTLEdBQUdDLHFCQUFxQixDQUFDRixNQUFNLENBQUM7UUFDL0MsSUFBSUEsTUFBTSxHQUFHUixLQUFLLENBQUNXLEdBQUcsR0FBRyxHQUFHLEVBQUU7VUFDMUJYLEtBQUssQ0FBQzFGLEtBQUssR0FBR21HLFNBQVM7UUFDM0IsQ0FBQyxNQUFNO1VBQ0hULEtBQUssQ0FBQzFGLEtBQUssR0FBR29HLHFCQUFxQixDQUFDVixLQUFLLENBQUNXLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDeEQ7UUFFQSxJQUFNeEksS0FBSyxHQUFHLElBQUl5SSxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ2pDWixLQUFLLENBQUNhLGFBQWEsQ0FBQzFJLEtBQUssQ0FBQztNQUM5QixDQUFDLENBQUM7TUFFRjhILE9BQU8sQ0FBQy9ILGdCQUFnQixDQUFDLE9BQU8sRUFBRSxZQUFNO1FBQ3BDLElBQU1vSSxVQUFVLEdBQUdDLG9CQUFvQixDQUFDUCxLQUFLLENBQUMxRixLQUFLLENBQUM7UUFDcEQsSUFBTWtHLE1BQU0sR0FBR0YsVUFBVSxHQUFHLEdBQUc7UUFDL0IsSUFBTUcsU0FBUyxHQUFHQyxxQkFBcUIsQ0FBQ0YsTUFBTSxDQUFDO1FBQy9DLElBQUlBLE1BQU0sR0FBR1IsS0FBSyxDQUFDYyxHQUFHLEdBQUcsR0FBRyxFQUFFO1VBQzFCZCxLQUFLLENBQUMxRixLQUFLLEdBQUdtRyxTQUFTO1FBQzNCLENBQUMsTUFBTTtVQUNIVCxLQUFLLENBQUMxRixLQUFLLEdBQUdvRyxxQkFBcUIsQ0FBQ1YsS0FBSyxDQUFDYyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ3hEO1FBQ0EsSUFBTTNJLEtBQUssR0FBRyxJQUFJeUksS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUNqQ1osS0FBSyxDQUFDYSxhQUFhLENBQUMxSSxLQUFLLENBQUM7TUFDOUIsQ0FBQyxDQUFDO01BRUY2SCxLQUFLLENBQUM5SCxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsWUFBTTtRQUNuQyxJQUFNc0ksTUFBTSxHQUFHRCxvQkFBb0IsQ0FBQ1AsS0FBSyxDQUFDMUYsS0FBSyxDQUFDO1FBQ2hELElBQUlrRyxNQUFNLEdBQUdSLEtBQUssQ0FBQ2MsR0FBRyxHQUFHLEdBQUcsRUFBRTtVQUMxQmQsS0FBSyxDQUFDMUYsS0FBSyxHQUFHb0cscUJBQXFCLENBQUNWLEtBQUssQ0FBQ2MsR0FBRyxHQUFHLEdBQUcsQ0FBQztVQUNwRCxJQUFNM0ksS0FBSyxHQUFHLElBQUl5SSxLQUFLLENBQUMsUUFBUSxDQUFDO1VBQ2pDWixLQUFLLENBQUNhLGFBQWEsQ0FBQzFJLEtBQUssQ0FBQztRQUM5QjtRQUVBLElBQUlxSSxNQUFNLEdBQUdSLEtBQUssQ0FBQ1csR0FBRyxHQUFHLEdBQUcsRUFBRTtVQUMxQlgsS0FBSyxDQUFDMUYsS0FBSyxHQUFHb0cscUJBQXFCLENBQUNWLEtBQUssQ0FBQ1csR0FBRyxHQUFHLEdBQUcsQ0FBQztVQUNwRCxJQUFNeEksTUFBSyxHQUFHLElBQUl5SSxLQUFLLENBQUMsUUFBUSxDQUFDO1VBQ2pDWixLQUFLLENBQUNhLGFBQWEsQ0FBQzFJLE1BQUssQ0FBQztRQUM5QjtNQUVKLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztJQUdGLElBQU1vSSxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUFJUSxXQUFXLEVBQUs7TUFDMUM7TUFDQSxJQUFJQyxRQUFRLEdBQUdELFdBQVcsQ0FBQ3RDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDOztNQUVoRDtNQUNBLElBQUl1QyxRQUFRLENBQUNDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSUQsUUFBUSxDQUFDQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDbEQ7UUFDQSxJQUFNQyxRQUFRLEdBQUdGLFFBQVEsQ0FBQ0csT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUN0QyxJQUFNQyxNQUFNLEdBQUdKLFFBQVEsQ0FBQ0csT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUVwQyxJQUFJRCxRQUFRLEdBQUdFLE1BQU0sRUFBRTtVQUNuQjtVQUNBSixRQUFRLEdBQUdBLFFBQVEsQ0FBQ3ZDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ3pDLENBQUMsTUFBTTtVQUNIO1VBQ0F1QyxRQUFRLEdBQUdBLFFBQVEsQ0FBQ3ZDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUNBLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQzVEO01BQ0osQ0FBQyxNQUFNLElBQUl1QyxRQUFRLENBQUNDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUMvQjtRQUNBLElBQUlELFFBQVEsQ0FBQ0ssV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHTCxRQUFRLENBQUN6SyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1VBQ2pEO1VBQ0F5SyxRQUFRLEdBQUdBLFFBQVEsQ0FBQ3ZDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ3pDLENBQUMsTUFBTTtVQUNIO1VBQ0F1QyxRQUFRLEdBQUdBLFFBQVEsQ0FBQ3ZDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ3pDO01BQ0o7O01BRUE7TUFDQSxPQUFPNkMsSUFBSSxDQUFDQyxLQUFLLENBQUNDLFVBQVUsQ0FBQ1IsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2pELENBQUM7SUFHRCxJQUFNTixxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUFJZSxLQUFLLEVBQUs7TUFDckMsV0FBQXhKLE1BQUEsQ0FBVyxDQUFDd0osS0FBSyxHQUFHLEdBQUcsRUFBRUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0VBRUw7QUFDSjs7Ozs7Ozs7Ozs7Ozs7O0FDcFBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDZSxTQUFTQyxlQUFlQSxDQUFDQyxJQUFJLEVBQUU7RUFDMUMsSUFBTUMsTUFBTSxHQUFHM0MsTUFBTSxDQUFDLHdCQUF3QixDQUFDO0VBQy9DLElBQUk0QyxPQUFPLEdBQUdELE1BQU0sQ0FBQ0UsSUFBSSxDQUFDLFFBQVEsQ0FBQztFQUNuQyxJQUFNQyxTQUFTLEdBQUc5QyxNQUFNLENBQUMsNEJBQTRCLENBQUM7RUFDdEQsSUFBTStDLFdBQVcsR0FBRy9DLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQztFQUN6RCxJQUFNZ0QsUUFBUSxHQUFHTCxNQUFNLENBQUNFLElBQUksQ0FBQyxTQUFTLENBQUM7RUFDdkMsSUFBTUksV0FBVyxHQUFHTixNQUFNLENBQUNFLElBQUksQ0FBQyxhQUFhLENBQUM7RUFDOUMsSUFBTUssWUFBWSxHQUFHUCxNQUFNLENBQUNFLElBQUksQ0FBQyxjQUFjLENBQUM7O0VBRWhEO0VBQ0EsSUFBSU0sVUFBVSxHQUFHLENBQUM7O0VBRWxCO0VBQ0EsSUFBTUMsY0FBYyxHQUFHLG1CQUFtQjtFQUUxQyxTQUFTQyxTQUFTQSxDQUFBLEVBQXFFO0lBQUEsSUFBcEVDLE1BQU0sR0FBQUMsU0FBQSxDQUFBbE0sTUFBQSxRQUFBa00sU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxDQUFDO0lBQUEsSUFBRUUsY0FBYyxHQUFBRixTQUFBLENBQUFsTSxNQUFBLFFBQUFrTSxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLENBQUM7SUFBQSxJQUFFRyxXQUFXLEdBQUFILFNBQUEsQ0FBQWxNLE1BQUEsUUFBQWtNLFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsSUFBSTtJQUFBLElBQUVJLE1BQU0sR0FBQUosU0FBQSxDQUFBbE0sTUFBQSxRQUFBa00sU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxLQUFLO0lBQ25GVCxTQUFTLENBQUMzSSxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQzdCNkYsTUFBTSxDQUFDMEMsSUFBSSxDQUFDO01BQ1ZrQixHQUFHLEtBQUE3SyxNQUFBLENBQUsySixJQUFJLENBQUNtQixTQUFTLDhCQUEyQjtNQUNqREMsTUFBTSxFQUFFLEtBQUs7TUFDYkMsUUFBUSxFQUFFLE1BQU07TUFDaEJsQixJQUFJLEVBQUU7UUFDSlMsTUFBTSxFQUFOQSxNQUFNO1FBQ05HLGNBQWMsRUFBZEEsY0FBYztRQUNkTyxZQUFZLEVBQUVkLFlBQVk7UUFDMUJSLElBQUksRUFBRTtNQUNSLENBQUM7TUFDRHVCLE9BQU8sV0FBQUEsUUFBQ0MsUUFBUSxFQUFFO1FBQ2hCbEUsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUNtRSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRTdDLElBQUlELFFBQVEsS0FBSyxLQUFLLEVBQUU7VUFDdEI7VUFDQWYsVUFBVSxJQUFJZSxRQUFRLENBQUNFLEtBQUs7VUFFNUIsSUFBSVQsTUFBTSxFQUFFO1lBQUVoQixNQUFNLENBQUN3QixJQUFJLENBQUMsSUFBSSxDQUFDO1VBQUU7VUFDakN4QixNQUFNLENBQUN4QixNQUFNLENBQUMrQyxRQUFRLENBQUNHLE1BQU0sQ0FBQyxDQUFDQyxPQUFPLENBQUM7WUFBRUMsT0FBTyxFQUFFO1VBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxZQUFNO1lBQ2hFdkUsTUFBTSxLQUFBakgsTUFBQSxDQUFLcUssY0FBYyxDQUFFLENBQUMsQ0FBQ2tCLE9BQU8sQ0FBQztjQUFFQyxPQUFPLEVBQUU7WUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO1lBQ3pEdkUsTUFBTSxLQUFBakgsTUFBQSxDQUFLcUssY0FBYyxDQUFFLENBQUMsQ0FBQ3hKLElBQUksQ0FBQyxVQUFDNEssQ0FBQyxFQUFFQyxHQUFHLEVBQUs7Y0FDNUN6RSxNQUFNLENBQUN5RSxHQUFHLENBQUMsQ0FBQ3pLLFdBQVcsS0FBQWpCLE1BQUEsQ0FBS3FLLGNBQWMsQ0FBRSxDQUFDO2NBRTdDLElBQU1zQixTQUFTLEdBQUcxRSxNQUFNLENBQUMsMEJBQTBCLENBQUM7Y0FDcEQsSUFBTTJFLFNBQVMsR0FBRzNFLE1BQU0sQ0FBQyxhQUFhLENBQUM7Y0FFdkMyRSxTQUFTLENBQUN4RCxNQUFNLENBQUN1RCxTQUFTLENBQUNQLElBQUksQ0FBQyxDQUFDLENBQUM7Y0FDbENPLFNBQVMsQ0FBQ3BMLE1BQU0sQ0FBQyxDQUFDO1lBQ3BCLENBQUMsQ0FBQztVQUNKLENBQUMsQ0FBQztVQUNGd0osU0FBUyxDQUFDOUksV0FBVyxDQUFDLFNBQVMsQ0FBQztVQUNoQyxJQUFJa0ssUUFBUSxDQUFDRSxLQUFLLEtBQUssQ0FBQyxJQUNqQkYsUUFBUSxDQUFDRSxLQUFLLEdBQUdYLGNBQWMsRUFDaEM7WUFDSlgsU0FBUyxDQUFDOEIsSUFBSSxDQUFDLENBQUM7WUFDaEI3QixXQUFXLENBQUM2QixJQUFJLENBQUMsQ0FBQztZQUNsQmpDLE1BQU0sQ0FBQzNJLFdBQVcsQ0FBQyxRQUFRLENBQUM7VUFDOUI7UUFDRjtRQUVBLElBQUlrSyxRQUFRLEtBQUssS0FBSyxJQUFJQSxRQUFRLENBQUNHLE1BQU0sS0FBSyxLQUFLLEVBQUU7VUFDbkR2QixTQUFTLENBQUM4QixJQUFJLENBQUMsQ0FBQztVQUNoQjdCLFdBQVcsQ0FBQzZCLElBQUksQ0FBQyxDQUFDO1VBQ2xCakMsTUFBTSxDQUFDM0ksV0FBVyxDQUFDLFFBQVEsQ0FBQztVQUM1QjtRQUNGO01BQ0Y7SUFDRixDQUFDLENBQUM7RUFDSjtFQUVBOEksU0FBUyxDQUFDN0MsRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFDdkUsQ0FBQyxFQUFLO0lBQzNCQSxDQUFDLENBQUN4QyxjQUFjLENBQUMsQ0FBQztJQUVsQjBKLE9BQU8sSUFBSUQsTUFBTSxDQUFDRSxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ2pDUSxTQUFTLENBQUNULE9BQU8sRUFBRUksUUFBUSxDQUFDO0VBQzlCLENBQUMsQ0FBQztBQUNKOzs7Ozs7Ozs7Ozs7Ozs7QUM5RWEsU0FBUzZCLGFBQWFBLENBQUEsRUFBRztFQUNwQyxJQUFNQyxTQUFTLEdBQUc5RSxNQUFNLENBQUMscUJBQXFCLENBQUM7RUFFL0MsSUFBRzhFLFNBQVMsQ0FBQ3pOLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDckJ5TixTQUFTLENBQUNsTCxJQUFJLENBQUMsVUFBUzRLLENBQUMsRUFBRUMsR0FBRyxFQUFFO01BQzVCLElBQU1NLEtBQUssR0FBRy9FLE1BQU0sQ0FBQyxJQUFJLENBQUM7O01BRTFCO01BQ0EsSUFBTWdGLFVBQVUsR0FBR0QsS0FBSyxDQUFDOUssSUFBSSxDQUFDLG1CQUFtQixDQUFDO01BRWxEK0ssVUFBVSxDQUFDL0UsRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFTdkUsQ0FBQyxFQUFFO1FBQy9CO1FBQ0EsSUFBTXVKLFFBQVEsR0FBR2pGLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDN0IsSUFBTWtGLFlBQVksR0FBR0QsUUFBUSxDQUFDRSxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDcEQsSUFBTUMsSUFBSSxHQUFHSCxRQUFRLENBQUNJLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDeEMsSUFBR0QsSUFBSSxDQUFDbkwsSUFBSSxnQ0FBQWxCLE1BQUEsQ0FBZ0NtTSxZQUFZLE9BQUksQ0FBQyxDQUFDN04sTUFBTSxHQUFHLENBQUMsRUFBRTtVQUN0RSxJQUFNaU8sT0FBTyxHQUFHRixJQUFJLENBQUNuTCxJQUFJLGdDQUFBbEIsTUFBQSxDQUFnQ21NLFlBQVksT0FBSSxDQUFDLENBQUNDLElBQUksQ0FBQyxVQUFVLENBQUM7VUFFM0ZKLEtBQUssQ0FBQzlLLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDcUssT0FBTyxDQUFDO1lBQUVDLE9BQU8sRUFBRTtVQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBVztZQUNuRVEsS0FBSyxDQUFDOUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDa0wsSUFBSSxDQUFDLEtBQUssRUFBRUcsT0FBTyxDQUFDO1lBQy9DUCxLQUFLLENBQUM5SyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUNrTCxJQUFJLENBQUMsVUFBVSxFQUFFRyxPQUFPLENBQUM7WUFDcERQLEtBQUssQ0FBQzlLLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDcUssT0FBTyxDQUFDO2NBQUVDLE9BQU8sRUFBRTtZQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7VUFDL0QsQ0FBQyxDQUFDO1FBQ047TUFDSixDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7RUFDTjtBQUVKOzs7Ozs7Ozs7Ozs7OztBQzVCQSxTQUFTZ0IsU0FBU0EsQ0FBQSxFQUFHO0VBQ25CO0FBQ0Y7QUFDQTtFQUNFLElBQU1DLElBQUksR0FBR3hOLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLHFCQUFxQixDQUFDO0VBQzFELElBQU13TixPQUFPLEdBQUd6TixRQUFRLENBQUNDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQztFQUMxRCxJQUFNeU4sSUFBSSxHQUFHMU4sUUFBUSxDQUFDQyxhQUFhLENBQUMsZ0JBQWdCLENBQUM7RUFDckQsSUFBTTBOLE1BQU0sR0FBRzNOLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLGtCQUFrQixDQUFDO0VBQ3pELElBQU0yTixNQUFNLEdBQUc1TixRQUFRLENBQUNDLGFBQWEsQ0FBQyxZQUFZLENBQUM7RUFDbkQsSUFBTTROLElBQUksR0FBRzdOLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLFVBQVUsQ0FBQztFQUMvQyxJQUFNNk4sR0FBRyxHQUFHOU4sUUFBUSxDQUFDQyxhQUFhLENBQUMsU0FBUyxDQUFDO0VBQzdDLElBQU04TixTQUFTLEdBQUcvTixRQUFRLENBQUNDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQzs7RUFFMUQ7QUFDRjtBQUNBO0FBQ0E7RUFDRSxJQUFJK04sTUFBTSxHQUFHQyxNQUFNLENBQUMsQ0FBRVAsSUFBSSxDQUFDdEssS0FBSyxHQUFHdUssTUFBTSxDQUFDdkssS0FBSyxHQUFJLEdBQUcsRUFBRW9ILE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7RUFFbkU7QUFDRjtBQUNBO0VBQ0VnRCxJQUFJLENBQUNwTSxTQUFTLENBQUNNLEdBQUcsQ0FBQyxRQUFRLENBQUM7RUFDNUIrTCxPQUFPLENBQUNyTSxTQUFTLENBQUNFLE1BQU0sQ0FBQyxRQUFRLENBQUM7RUFDbENzTSxNQUFNLENBQUNNLFNBQVMsTUFBQW5OLE1BQUEsQ0FBTWlOLE1BQU0sTUFBRztFQUUvQixJQUFJQyxNQUFNLENBQUNQLElBQUksQ0FBQ3RLLEtBQUssQ0FBQyxJQUFJNkssTUFBTSxDQUFDTixNQUFNLENBQUN2SyxLQUFLLENBQUMsRUFBRTtJQUM5Q2QsTUFBTSxDQUFDc0YsU0FBUyxHQUFHdEYsTUFBTSxDQUFDc0YsU0FBUyxJQUFJLEVBQUU7SUFDekN0RixNQUFNLENBQUNzRixTQUFTLENBQUNDLElBQUksQ0FBQztNQUNwQixPQUFPLEVBQUUsNEJBQTRCO01BQ3JDLGFBQWEsRUFBRTZGLElBQUksQ0FBQ3RLLEtBQUs7TUFDekIsUUFBUSxFQUFFdUssTUFBTSxDQUFDdks7SUFDbkIsQ0FBQyxDQUFDO0VBQ0o7O0VBRUE7QUFDRjtBQUNBO0VBQ0UsUUFBUSxJQUFJO0lBQ1YsS0FBSzRLLE1BQU0sR0FBRyxDQUFDO01BQ2JILElBQUksQ0FBQ3pNLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDLFFBQVEsQ0FBQztNQUMvQjtJQUNGLEtBQUswTSxNQUFNLEdBQUcsQ0FBQztNQUNiRixHQUFHLENBQUMxTSxTQUFTLENBQUNFLE1BQU0sQ0FBQyxRQUFRLENBQUM7TUFDOUI7SUFDRixLQUFLME0sTUFBTSxLQUFLLENBQUM7TUFDZkgsSUFBSSxDQUFDek0sU0FBUyxDQUFDRSxNQUFNLENBQUMsUUFBUSxDQUFDO01BQy9Cd00sR0FBRyxDQUFDMU0sU0FBUyxDQUFDRSxNQUFNLENBQUMsUUFBUSxDQUFDO01BQzlCO0lBQ0Y7TUFDRTtFQUNKOztFQUVBO0FBQ0Y7QUFDQTtFQUNFLElBQUl5TSxTQUFTLEVBQUU7SUFDYkEsU0FBUyxDQUFDL00sZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFlBQU07TUFDeEN3TSxJQUFJLENBQUNwTSxTQUFTLENBQUNFLE1BQU0sQ0FBQyxRQUFRLENBQUM7TUFDL0JtTSxPQUFPLENBQUNyTSxTQUFTLENBQUNNLEdBQUcsQ0FBQyxRQUFRLENBQUM7TUFDL0JtTSxJQUFJLENBQUN6TSxTQUFTLENBQUNNLEdBQUcsQ0FBQyxRQUFRLENBQUM7TUFDNUJvTSxHQUFHLENBQUMxTSxTQUFTLENBQUNNLEdBQUcsQ0FBQyxRQUFRLENBQUM7TUFDM0JnTSxJQUFJLENBQUN0SyxLQUFLLEdBQUcsRUFBRTtNQUNmdUssTUFBTSxDQUFDdkssS0FBSyxHQUFHLEVBQUU7TUFDakI0SyxNQUFNLEdBQUcsQ0FBQztJQUNaLENBQUMsQ0FBQztFQUNKO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ2UsU0FBU0cscUJBQXFCQSxDQUFBLEVBQUc7RUFDOUM7QUFDRjtBQUNBO0VBQ0UsSUFBTUMsSUFBSSxHQUFHcE8sUUFBUSxDQUFDcUMsY0FBYyxDQUFDLFdBQVcsQ0FBQztFQUVqRCxJQUFJK0wsSUFBSSxFQUFFO0lBQ1JBLElBQUksQ0FBQ3BOLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxVQUFDMEMsQ0FBQyxFQUFLO01BQ3JDQSxDQUFDLENBQUN4QyxjQUFjLENBQUMsQ0FBQztNQUVsQnFNLFNBQVMsQ0FBQyxDQUFDO0lBQ2IsQ0FBQyxDQUFDO0VBQ0o7QUFFRjs7Ozs7Ozs7Ozs7Ozs7O0FDdEZPLFNBQVNjLFdBQVdBLENBQUEsRUFBRztFQUUxQmpQLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDd0MsSUFBSSxDQUFDLFlBQVk7SUFDekN4QyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNNLEtBQUssQ0FBQyxZQUFZO01BQ3RCNE8sa0JBQWtCLENBQUNsUCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQyxDQUFDO0VBQ04sQ0FBQyxDQUFDO0VBRUYsSUFBTW1QLGNBQWMsR0FBR25QLENBQUMsQ0FBQ29QLFFBQVEsQ0FBQyxDQUFDQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUM7RUFDekQsSUFBTUMsSUFBSSxHQUFHdlAsQ0FBQyxDQUFDLDJCQUEyQixDQUFDO0VBRTNDdVAsSUFBSSxDQUFDL00sSUFBSSxDQUFDLFlBQVk7SUFDbEIsSUFBTWdOLEdBQUcsR0FBR3hQLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbkIsSUFBTXlQLFFBQVEsR0FBR0QsR0FBRyxDQUFDM00sSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQ2hELElBQU02TSxNQUFNLEdBQUdGLEdBQUcsQ0FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDN0IsSUFBTTRCLGtCQUFrQixHQUFHM1AsQ0FBQyxDQUFDLDZDQUE2QyxHQUFFMFAsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUV6RixJQUFJUCxjQUFjLEVBQUU7TUFDaEJTLFNBQVMsQ0FBQ0osR0FBRyxFQUFFRyxrQkFBa0IsQ0FBQztJQUN0QztJQUVBRixRQUFRLENBQUNqTixJQUFJLENBQUMsWUFBWTtNQUFBLElBQUEwQixLQUFBO01BQ3RCLElBQUkyTCxXQUFXLEdBQUc3UCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM2QyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQ2tMLElBQUksQ0FBQyxNQUFNLENBQUM7TUFFdkUsSUFBSW9CLGNBQWMsSUFBSVUsV0FBVyxFQUFFO1FBQy9CN1AsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDOFAsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDL00sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN6Qy9DLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzhQLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQ2hOLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDbkQsSUFBRzJNLE1BQU0sSUFBSTFQLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzZDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQ2lOLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQ3pFaUMsT0FBTyxDQUFDUixHQUFHLEVBQUVHLGtCQUFrQixDQUFDO1VBRWhDdE4sVUFBVSxDQUFDLFlBQU07WUFDYnJDLENBQUMsQ0FBQ2tFLEtBQUksQ0FBQyxDQUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDdkMsS0FBSyxDQUFDLENBQUM7VUFDckMsQ0FBQyxFQUFFLElBQUksQ0FBQztVQUNSK0IsVUFBVSxDQUFDLFlBQU07WUFDYnJDLENBQUMsQ0FBQ2tFLEtBQUksQ0FBQyxDQUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDRixHQUFHLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQztVQUN0RCxDQUFDLEVBQUUsSUFBSSxDQUFDO1FBQ1o7TUFDSjtJQUNKLENBQUMsQ0FBQztFQUNOLENBQUMsQ0FBQztFQUVGLFNBQVNpTixTQUFTQSxDQUFDSixHQUFHLEVBQUVHLGtCQUFrQixFQUFFO0lBQ3hDSCxHQUFHLENBQUM1TSxXQUFXLENBQUMsV0FBVyxDQUFDO0lBQzVCNE0sR0FBRyxDQUFDekIsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUM7SUFDaEM0QixrQkFBa0IsQ0FBQy9NLFdBQVcsQ0FBQyxXQUFXLENBQUM7SUFDM0MrTSxrQkFBa0IsQ0FBQzVCLElBQUksQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDO0VBQ3JEO0VBRUEsU0FBU2lDLE9BQU9BLENBQUNSLEdBQUcsRUFBRUcsa0JBQWtCLEVBQUU7SUFDdENILEdBQUcsQ0FBQ3pNLFFBQVEsQ0FBQyxXQUFXLENBQUM7SUFDekJ5TSxHQUFHLENBQUN6QixJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQztJQUMvQjRCLGtCQUFrQixDQUFDNU0sUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUN4QzRNLGtCQUFrQixDQUFDNUIsSUFBSSxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUM7RUFDcEQ7RUFFQSxTQUFTbUIsa0JBQWtCQSxDQUFDZSxPQUFPLEVBQUU7SUFFakMsSUFBSUMsU0FBUyxHQUFHdFAsUUFBUSxDQUFDTSxnQkFBZ0IsQ0FBQyxrQ0FBa0MsQ0FBQztJQUM3RSxJQUFJaVAsV0FBVyxHQUFHRixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNHLE9BQU8sQ0FBQzVELEdBQUc7SUFFeEMwRCxTQUFTLENBQUMvTyxPQUFPLENBQUMsVUFBQ2tQLFlBQVksRUFBSztNQUVoQyxJQUFJQSxZQUFZLENBQUMxSixFQUFFLEtBQUt3SixXQUFXLEVBQUU7UUFFakMsSUFBSUcsZ0JBQWdCLEdBQUdELFlBQVksQ0FBQ0Usc0JBQXNCO1FBRTFERCxnQkFBZ0IsQ0FBQ3BILGFBQWEsQ0FBQ0EsYUFBYSxDQUFDbEgsU0FBUyxDQUFDTSxHQUFHLENBQUMsSUFBSSxDQUFDO1FBRWhFLElBQUlmLE1BQU0sR0FBRzhPLFlBQVksQ0FBQ0Usc0JBQXNCLENBQUMxUCxhQUFhLENBQUMsaUJBQWlCLENBQUMsQ0FBQ1csWUFBWTtRQUU5RjhPLGdCQUFnQixDQUFDN08sS0FBSyxDQUFDQyxTQUFTLEdBQUdILE1BQU0sR0FBQyxJQUFJO1FBQzlDK08sZ0JBQWdCLENBQUNwSCxhQUFhLENBQUNsSCxTQUFTLENBQUNNLEdBQUcsQ0FBQyxhQUFhLENBQUM7UUFDM0QrTixZQUFZLENBQUN4UCxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUNtQixTQUFTLENBQUNNLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFFeERELFVBQVUsQ0FBQyxZQUFNO1VBQ2JpTyxnQkFBZ0IsQ0FBQ0Msc0JBQXNCLENBQUNySCxhQUFhLENBQUMvRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztNQUNWO0lBQ0osQ0FBQyxDQUFDO0lBRUYsSUFBSThOLE9BQU8sQ0FBQzVQLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtNQUN4QjRQLE9BQU8sQ0FBQ3hOLE1BQU0sQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxDQUFDLENBQUNDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO01BQzdDc04sT0FBTyxDQUFDck4sV0FBVyxDQUFDLElBQUksQ0FBQztNQUN6QnFOLE9BQU8sQ0FBQ3hOLE1BQU0sQ0FBQyxDQUFDLENBQUNBLE1BQU0sQ0FBQyxDQUFDLENBQUNHLFdBQVcsQ0FBQyxhQUFhLENBQUM7TUFDcERxTixPQUFPLENBQUN4TixNQUFNLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsQ0FBQyxDQUFDOE4sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDck8sY0FBYyxDQUFDLENBQUM7SUFDbkQsQ0FBQyxNQUFNO01BQ0gsSUFBSVosTUFBTSxHQUFHME8sT0FBTyxDQUFDeE4sTUFBTSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLENBQUMsQ0FBQ0csSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUNDLFdBQVcsQ0FBQyxDQUFDO01BQzFFbU4sT0FBTyxDQUFDeE4sTUFBTSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLENBQUMsQ0FBQ0MsR0FBRyxDQUFDLFlBQVksRUFBRXBCLE1BQU0sQ0FBQztNQUNqRDBPLE9BQU8sQ0FBQ2xOLFFBQVEsQ0FBQyxJQUFJLENBQUM7TUFDdEJrTixPQUFPLENBQUN4TixNQUFNLENBQUMsQ0FBQyxDQUFDQSxNQUFNLENBQUMsQ0FBQyxDQUFDTSxRQUFRLENBQUMsYUFBYSxDQUFDO0lBQ3JEO0VBQ0o7O0VBRUE7O0VBRUEsSUFBSTBOLFVBQVUsR0FBRzdQLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUM7RUFFNUQsSUFBSXVQLFVBQVUsRUFBRTtJQUNaQSxVQUFVLENBQUN0UCxPQUFPLENBQUMsVUFBQ3VQLFNBQVMsRUFBSztNQUM5QkEsU0FBUyxDQUFDOU8sZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFVBQUMwQyxDQUFDLEVBQUs7UUFDdkNvTSxTQUFTLENBQUMxTyxTQUFTLENBQUMyTyxNQUFNLENBQUMsV0FBVyxDQUFDO01BQzNDLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztFQUNOOztFQUVDO0VBQ0EsU0FBU0MsVUFBVUEsQ0FBQ0MsTUFBTSxFQUFFO0lBQ3pCN1EsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDa04sT0FBTyxDQUFDO01BQ3ZCNEQsU0FBUyxFQUFFOVEsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDOFEsU0FBUyxDQUFDLENBQUMsR0FBR0Q7SUFDaEQsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDYjs7RUFFQTtFQUNBN1EsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDd0MsSUFBSSxDQUFDLFlBQVk7SUFDekJ4QyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNNLEtBQUssQ0FBQyxZQUFZO01BQ3RCNkcsT0FBTyxDQUFDQyxHQUFHLENBQUNwSCxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM4USxTQUFTLENBQUMsQ0FBQyxDQUFDO01BQzNDOVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDOFAsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDdlAsSUFBSSxDQUFDLENBQUMsQ0FBQ3dDLFFBQVEsQ0FBQyxJQUFJLENBQUM7TUFDaEQvQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM4UCxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMvTSxRQUFRLENBQUMsT0FBTyxDQUFDO01BQ2pENk4sVUFBVSxDQUFDLEdBQUcsQ0FBQztJQUNuQixDQUFDLENBQUM7RUFDTixDQUFDLENBQUM7QUFDTjs7Ozs7Ozs7Ozs7Ozs7QUN6SE8sU0FBU0csY0FBY0EsQ0FBQSxFQUFHO0VBQy9CLElBQUlDLFFBQVEsR0FBR3BRLFFBQVEsQ0FBQ3FDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQztFQUM3RCxJQUFJK04sUUFBUSxFQUFFO0lBQ1pBLFFBQVEsQ0FBQ3BQLGdCQUFnQixDQUFDLE9BQU8sRUFBRXFQLFdBQVcsQ0FBQztJQUMvQ0QsUUFBUSxDQUFDcFAsZ0JBQWdCLENBQUMsVUFBVSxFQUFFc1AsY0FBYyxDQUFDO0lBQ3JERixRQUFRLENBQUNwUCxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUV1UCxpQkFBaUIsQ0FBQztFQUM3RDtFQUNBLFNBQVNGLFdBQVdBLENBQUNwUCxLQUFLLEVBQUU7SUFDMUIsSUFBSUEsS0FBSyxDQUFDb0YsTUFBTSxDQUFDbUssT0FBTyxLQUFLLEdBQUcsRUFBRTtNQUNoQ3ZQLEtBQUssQ0FBQ0MsY0FBYyxDQUFDLENBQUM7TUFDdEIsSUFBSTBLLEdBQUcsR0FBRzNLLEtBQUssQ0FBQ29GLE1BQU0sQ0FBQ29LLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQztNQUNyRG5PLE1BQU0sQ0FBQ2tNLFFBQVEsQ0FBQ2tDLElBQUksR0FBRzlFLEdBQUc7SUFDNUI7RUFDRjtFQUVBLFNBQVMwRSxjQUFjQSxDQUFDclAsS0FBSyxFQUFFO0lBQzdCLElBQUlBLEtBQUssQ0FBQ29GLE1BQU0sQ0FBQ21LLE9BQU8sS0FBSyxHQUFHLElBQUl2UCxLQUFLLENBQUMwUCxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQ3REMVAsS0FBSyxDQUFDQyxjQUFjLENBQUMsQ0FBQztNQUN0QixJQUFJMEssR0FBRyxHQUFHM0ssS0FBSyxDQUFDb0YsTUFBTSxDQUFDb0ssWUFBWSxDQUFDLGdCQUFnQixDQUFDO01BQ3JEbk8sTUFBTSxDQUFDc08sSUFBSSxDQUFDaEYsR0FBRyxFQUFFLFFBQVEsQ0FBQztJQUM1QjtFQUNGO0VBRUEsU0FBUzJFLGlCQUFpQkEsQ0FBQ3RQLEtBQUssRUFBRTtJQUNoQyxJQUFJQSxLQUFLLENBQUNvRixNQUFNLENBQUNtSyxPQUFPLEtBQUssR0FBRyxFQUFFO01BQ2hDLElBQUk1RSxHQUFHLEdBQUczSyxLQUFLLENBQUNvRixNQUFNLENBQUNvSyxZQUFZLENBQUMsZ0JBQWdCLENBQUM7TUFDckRuTyxNQUFNLENBQUNzTyxJQUFJLENBQUNoRixHQUFHLEVBQUUsUUFBUSxDQUFDO0lBQzVCO0VBQ0Y7QUFDRjs7Ozs7Ozs7Ozs7Ozs7O0FDN0JPLFNBQVNpRixhQUFhQSxDQUFBLEVBQUc7RUFJNUIsSUFBSXpSLENBQUMsQ0FBQ2tELE1BQU0sQ0FBQyxDQUFDd08sS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUU7SUFFekIxUixDQUFDLENBQUMsOEJBQThCLENBQUMsQ0FBQ3dDLElBQUksQ0FBQyxZQUFZO01BQy9DeEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDNkksRUFBRSxDQUFDLFlBQVksRUFBQyxZQUFZO1FBQ2hDLElBQUs3SSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNLLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtVQUM3QkwsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDNEMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDckMsSUFBSSxDQUFDLENBQUMsQ0FBQ3FDLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDOUQsQ0FBQyxNQUFJO1VBQ0Q1QyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM0QyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUNyQyxJQUFJLENBQUMsQ0FBQyxDQUFDcUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztVQUNwRTVDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQytDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQ3hDLElBQUksQ0FBQyxDQUFDLENBQUN3QyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ3hEO01BQ0osQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDO0VBQ0wsQ0FBQyxNQUNJO0lBQ0YvQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM0QyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUNyQyxJQUFJLENBQUMsQ0FBQyxDQUFDcUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztFQUN2RTtBQUNMOzs7Ozs7Ozs7Ozs7Ozs7QUNwQk8sU0FBUytPLFdBQVdBLENBQUEsRUFBRztFQUUxQjNSLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDd0MsSUFBSSxDQUFDLFlBQVk7SUFFM0MsSUFBSXhDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDSyxRQUFRLENBQUMscUJBQXFCLENBQUMsRUFBRTtNQUUvREwsQ0FBQyxDQUFDLG9DQUFvQyxDQUFDLENBQUMrQyxRQUFRLENBQUMsVUFBVSxDQUFDO01BRTVEL0MsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDNFIsVUFBVSxDQUFDLFlBQVk7UUFDcEM1UixDQUFDLENBQUMsb0NBQW9DLENBQUMsQ0FBQytDLFFBQVEsQ0FBQyxVQUFVLENBQUM7TUFDaEUsQ0FBQyxDQUFDO0lBRU4sQ0FBQyxNQUFNO01BRUgvQyxDQUFDLENBQUMsc0NBQXNDLENBQUMsQ0FBQytDLFFBQVEsQ0FBQyxVQUFVLENBQUM7TUFFOUQvQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM0UixVQUFVLENBQUMsWUFBWTtRQUNwQzVSLENBQUMsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDK0MsUUFBUSxDQUFDLFVBQVUsQ0FBQztNQUNsRSxDQUFDLENBQUM7SUFDTjtJQUVBL0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDNlIsVUFBVSxDQUFDLFlBQVk7TUFDM0I3UixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMrQyxRQUFRLENBQUMsVUFBVSxDQUFDO0lBQ2hDLENBQUMsQ0FBQztJQUVGL0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDNFIsVUFBVSxDQUFDLFlBQVk7TUFDM0I1UixDQUFDLENBQUMsMEJBQTBCLENBQUMsQ0FBQzRDLFdBQVcsQ0FBQyxVQUFVLENBQUM7SUFDekQsQ0FBQyxDQUFDO0VBQ04sQ0FBQyxDQUFDO0FBRU47Ozs7Ozs7Ozs7Ozs7OztBQzlCTyxTQUFTa1AsTUFBTUEsQ0FBQSxFQUFHO0VBR3JCLElBQUk5UixDQUFDLENBQUMsOEJBQThCLENBQUMsQ0FBQ0MsTUFBTSxFQUFFO0lBQzFDRCxDQUFDLENBQUMsa0RBQWtELENBQUMsQ0FBQytSLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQztJQUVyRyxJQUFJek4sQ0FBQyxHQUFHMUQsUUFBUSxDQUFDcUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDO0lBQ2xELElBQUlxQixDQUFDLEVBQUU7TUFDSCxJQUFJME4sUUFBUSxHQUFHLElBQUlDLGdCQUFnQixDQUFDLFVBQVVwUSxLQUFLLEVBQUU7UUFDakQ3QixDQUFDLENBQUMsa0RBQWtELENBQUMsQ0FBQytSLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQztNQUN6RyxDQUFDLENBQUM7TUFDRkMsUUFBUSxDQUFDRSxPQUFPLENBQUM1TixDQUFDLEVBQUU7UUFDaEI2TixVQUFVLEVBQUUsSUFBSTtRQUNoQkMsZUFBZSxFQUFFLENBQUMsT0FBTyxDQUFDO1FBQzFCQyxTQUFTLEVBQUUsSUFBSTtRQUNmQyxhQUFhLEVBQUU7TUFDbkIsQ0FBQyxDQUFDO0lBQ047SUFDQSxJQUFJQyxDQUFDLEdBQUczUixRQUFRLENBQUNxQyxjQUFjLENBQUMsa0JBQWtCLENBQUM7SUFDbkQsSUFBSXNQLENBQUMsRUFBRTtNQUNILElBQUlQLFFBQVEsR0FBRyxJQUFJQyxnQkFBZ0IsQ0FBQyxVQUFVcFEsS0FBSyxFQUFFO1FBQ2pEN0IsQ0FBQyxDQUFDLDZCQUE2QixDQUFDLENBQUMrUixJQUFJLENBQUMseUNBQXlDLENBQUM7TUFDcEYsQ0FBQyxDQUFDO01BQ0ZDLFFBQVEsQ0FBQ0UsT0FBTyxDQUFDSyxDQUFDLEVBQUU7UUFDaEJKLFVBQVUsRUFBRSxJQUFJO1FBQ2hCQyxlQUFlLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFDMUJDLFNBQVMsRUFBRSxJQUFJO1FBQ2ZDLGFBQWEsRUFBRTtNQUNuQixDQUFDLENBQUM7SUFDTjtFQUNKO0VBRUEsSUFBSXRTLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQ0MsTUFBTSxFQUFFO0lBRXZCRCxDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQytSLElBQUksQ0FBQywrQ0FBK0MsQ0FBQztJQUVsRixJQUFJek4sQ0FBQyxHQUFHMUQsUUFBUSxDQUFDcUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDO0lBQ2xELElBQUlxQixDQUFDLEVBQUU7TUFDSCxJQUFJME4sUUFBUSxHQUFHLElBQUlDLGdCQUFnQixDQUFDLFVBQVVwUSxLQUFLLEVBQUU7UUFDakQ3QixDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQytSLElBQUksQ0FBQywrQ0FBK0MsQ0FBQztNQUN0RixDQUFDLENBQUM7TUFDRkMsUUFBUSxDQUFDRSxPQUFPLENBQUM1TixDQUFDLEVBQUU7UUFDaEI2TixVQUFVLEVBQUUsSUFBSTtRQUNoQkMsZUFBZSxFQUFFLENBQUMsT0FBTyxDQUFDO1FBQzFCQyxTQUFTLEVBQUUsSUFBSTtRQUNmQyxhQUFhLEVBQUU7TUFDbkIsQ0FBQyxDQUFDO0lBQ047SUFDQSxJQUFJRSxFQUFFLEdBQUc1UixRQUFRLENBQUNxQyxjQUFjLENBQUMsaUJBQWlCLENBQUM7SUFDbkQsSUFBSXVQLEVBQUUsRUFBRTtNQUNKLElBQUlSLFFBQVEsR0FBRyxJQUFJQyxnQkFBZ0IsQ0FBQyxVQUFVcFEsS0FBSyxFQUFFO1FBQ2pEN0IsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLENBQUMrUixJQUFJLENBQUMsK0NBQStDLENBQUM7TUFDdEYsQ0FBQyxDQUFDO01BQ0ZDLFFBQVEsQ0FBQ0UsT0FBTyxDQUFDTSxFQUFFLEVBQUU7UUFDakJMLFVBQVUsRUFBRSxJQUFJO1FBQ2hCQyxlQUFlLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFDMUJDLFNBQVMsRUFBRSxJQUFJO1FBQ2ZDLGFBQWEsRUFBRTtNQUNuQixDQUFDLENBQUM7SUFDTjtFQUNKO0VBRUEsSUFBSXRTLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQ0MsTUFBTSxFQUFFO0lBQ3pCRCxDQUFDLENBQUMsMkJBQTJCLENBQUMsQ0FBQytSLElBQUksQ0FBQyxrRUFBa0UsQ0FBQztJQUN2Ry9SLENBQUMsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDK0osTUFBTSxDQUFDLG9KQUFvSixDQUFDO0lBRWxNLElBQUl6RixDQUFDLEdBQUcxRCxRQUFRLENBQUNxQyxjQUFjLENBQUMsaUJBQWlCLENBQUM7SUFDbEQsSUFBSXFCLENBQUMsRUFBRTtNQUNILElBQUkwTixRQUFRLEdBQUcsSUFBSUMsZ0JBQWdCLENBQUMsVUFBVXBRLEtBQUssRUFBRTtRQUNqRDdCLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDK1IsSUFBSSxDQUFDLGtFQUFrRSxDQUFDO1FBQ3ZHL1IsQ0FBQyxDQUFDLGtDQUFrQyxDQUFDLENBQUMrSixNQUFNLENBQUMsb0pBQW9KLENBQUM7TUFFdE0sQ0FBQyxDQUFDO01BQ0ZpSSxRQUFRLENBQUNFLE9BQU8sQ0FBQzVOLENBQUMsRUFBRTtRQUNoQjZOLFVBQVUsRUFBRSxJQUFJO1FBQ2hCQyxlQUFlLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFDMUJDLFNBQVMsRUFBRSxJQUFJO1FBQ2ZDLGFBQWEsRUFBRTtNQUNuQixDQUFDLENBQUM7SUFDTjtFQUNKO0VBRUEsSUFBSXRTLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDQyxNQUFNLEVBQUU7SUFDOUJELENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDK1IsSUFBSSxDQUFDLGtFQUFrRSxDQUFDO0lBQzVHLElBQUl6TixDQUFDLEdBQUcxRCxRQUFRLENBQUNxQyxjQUFjLENBQUMsaUJBQWlCLENBQUM7SUFDbEQsSUFBSXFCLENBQUMsRUFBRTtNQUNILElBQUkwTixRQUFRLEdBQUcsSUFBSUMsZ0JBQWdCLENBQUMsVUFBVXBRLEtBQUssRUFBRTtRQUNqRDdCLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDK1IsSUFBSSxDQUFDLGtFQUFrRSxDQUFDO01BQ2hILENBQUMsQ0FBQztNQUNGQyxRQUFRLENBQUNFLE9BQU8sQ0FBQzVOLENBQUMsRUFBRTtRQUNoQjZOLFVBQVUsRUFBRSxJQUFJO1FBQ2hCQyxlQUFlLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFDMUJDLFNBQVMsRUFBRSxJQUFJO1FBQ2ZDLGFBQWEsRUFBRTtNQUNuQixDQUFDLENBQUM7SUFDTjtFQUNKO0VBRUEsSUFBSXRTLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDQyxNQUFNLEVBQUU7SUFDbkNELENBQUMsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDK1IsSUFBSSxDQUFDLCtDQUErQyxDQUFDO0lBQzlGLElBQUl6TixDQUFDLEdBQUcxRCxRQUFRLENBQUNxQyxjQUFjLENBQUMsaUJBQWlCLENBQUM7SUFDbEQsSUFBSXFCLENBQUMsRUFBRTtNQUNILElBQUkwTixRQUFRLEdBQUcsSUFBSUMsZ0JBQWdCLENBQUMsVUFBVXBRLEtBQUssRUFBRTtRQUNqRDdCLENBQUMsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDK1IsSUFBSSxDQUFDLCtDQUErQyxDQUFDO01BQ2xHLENBQUMsQ0FBQztNQUNGQyxRQUFRLENBQUNFLE9BQU8sQ0FBQzVOLENBQUMsRUFBRTtRQUNoQjZOLFVBQVUsRUFBRSxJQUFJO1FBQ2hCQyxlQUFlLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFDMUJDLFNBQVMsRUFBRSxJQUFJO1FBQ2ZDLGFBQWEsRUFBRTtNQUNuQixDQUFDLENBQUM7SUFDTjtFQUNKOztFQUVBO0VBQ0E7O0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFFSjs7Ozs7Ozs7Ozs7Ozs7O0FDbklBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVlLFNBQVNHLFVBQVVBLENBQUNDLFFBQVEsRUFBRTtFQUMzQyxJQUFNQyxLQUFLLEdBQUcvUixRQUFRLENBQUNNLGdCQUFnQixDQUFDd1IsUUFBUSxDQUFDO0VBRWpELFNBQVNFLFFBQVFBLENBQUEsRUFBRztJQUNsQkQsS0FBSyxDQUFDeFIsT0FBTyxDQUFDLFVBQUMwUixJQUFJLEVBQUs7TUFDdEIsSUFBSWpLLE1BQU0sQ0FBQ2lLLElBQUksQ0FBQyxDQUFDQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDOUJELElBQUksQ0FBQ0UsUUFBUSxHQUFHLENBQUNGLElBQUksQ0FBQ0UsUUFBUTtNQUNoQztJQUNGLENBQUMsQ0FBQztFQUNKOztFQUVBO0VBQ0EsU0FBU0MsWUFBWUEsQ0FBQSxFQUFHO0lBQ3RCTCxLQUFLLENBQUN4UixPQUFPLENBQUMsVUFBQzBSLElBQUksRUFBSztNQUN0QixJQUFNSSxVQUFVLEdBQUdySyxNQUFNLENBQUNpSyxJQUFJLENBQUMsQ0FBQzVFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDcEwsSUFBSSxDQUFDLHFCQUFxQixDQUFDO01BQ3hGO01BQ0EsSUFBTXFRLFNBQVMsR0FBR0QsVUFBVSxDQUFDekMsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUVuQyxJQUFNMkMsVUFBVSxHQUFHRixVQUFVLENBQUNwUSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMyTixHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ3RELElBQU00QyxVQUFVLEdBQUdILFVBQVUsQ0FBQ3BRLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzJOLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDdEQsSUFBTTZDLGFBQWEsR0FBR0osVUFBVSxDQUFDcFEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDMk4sR0FBRyxDQUFDLENBQUMsQ0FBQztNQUM1RHFDLElBQUksQ0FBQ1MsUUFBUSxHQUFHLEtBQUs7TUFFckJULElBQUksQ0FBQ2pSLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxZQUFZO1FBQ3pDLElBQUksQ0FBQzJSLEtBQUssQ0FBQyxDQUFDO1FBQ1o7UUFDQTNTLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDbUIsU0FBUyxDQUFDRSxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQ3RFO1FBQ0EyUSxJQUFJLENBQUNXLFdBQVcsR0FBRyxDQUFDO1FBQ3BCTCxVQUFVLENBQUNuUixTQUFTLENBQUNNLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFDcEM2USxVQUFVLENBQUNuUixTQUFTLENBQUNFLE1BQU0sQ0FBQyxZQUFZLENBQUM7TUFDM0MsQ0FBQyxFQUFFLEtBQUssQ0FBQzs7TUFFVDtNQUNBMlEsSUFBSSxDQUFDalIsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLFlBQVk7UUFDOUMsSUFBSSxJQUFJLENBQUM0UixXQUFXLElBQUksRUFBRSxFQUFFO1VBQzFCLElBQUksQ0FBQ0QsS0FBSyxDQUFDLENBQUM7UUFDZDtRQUNBLElBQUksSUFBSSxDQUFDQyxXQUFXLElBQUksRUFBRSxFQUFFO1VBQzFCTixTQUFTLENBQUNyUyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUNtQixTQUFTLENBQUNNLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDaEUsQ0FBQyxNQUFNO1VBQ0w0USxTQUFTLENBQUNyUyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUNtQixTQUFTLENBQUNFLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDbkU7TUFDRixDQUFDLEVBQUUsS0FBSyxDQUFDO01BRVQsU0FBU3VSLFVBQVVBLENBQUEsRUFBRztRQUNwQixJQUFJWixJQUFJLENBQUNhLE1BQU0sSUFBSWIsSUFBSSxDQUFDYyxLQUFLLEVBQUU7VUFDN0JSLFVBQVUsQ0FBQ25SLFNBQVMsQ0FBQ00sR0FBRyxDQUFDLFlBQVksQ0FBQztVQUN0QzZRLFVBQVUsQ0FBQ25SLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDLFVBQVUsQ0FBQztVQUN2QzJRLElBQUksQ0FBQzNKLGFBQWEsQ0FBQ2xILFNBQVMsQ0FBQ0UsTUFBTSxDQUFDLFVBQVUsQ0FBQztVQUMvQzJRLElBQUksQ0FBQ2UsSUFBSSxDQUFDLENBQUM7UUFDYixDQUFDLE1BQU07VUFDTFQsVUFBVSxDQUFDblIsU0FBUyxDQUFDTSxHQUFHLENBQUMsVUFBVSxDQUFDO1VBQ3BDNlEsVUFBVSxDQUFDblIsU0FBUyxDQUFDRSxNQUFNLENBQUMsWUFBWSxDQUFDO1VBQ3pDMlEsSUFBSSxDQUFDVSxLQUFLLENBQUMsQ0FBQztRQUNkO01BQ0Y7TUFFQSxTQUFTTSxVQUFVQSxDQUFBLEVBQUc7UUFDcEJoQixJQUFJLENBQUNpQixLQUFLLEdBQUcsQ0FBQ2pCLElBQUksQ0FBQ2lCLEtBQUs7UUFDeEIsSUFBSWpCLElBQUksQ0FBQ2lCLEtBQUssRUFBRTtVQUNkVixVQUFVLENBQUNwUixTQUFTLENBQUNNLEdBQUcsQ0FBQyxVQUFVLENBQUM7VUFDcEM4USxVQUFVLENBQUNwUixTQUFTLENBQUNFLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDekMsQ0FBQyxNQUFNO1VBQ0xrUixVQUFVLENBQUNwUixTQUFTLENBQUNNLEdBQUcsQ0FBQyxVQUFVLENBQUM7VUFDcEM4USxVQUFVLENBQUNwUixTQUFTLENBQUNFLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDekM7TUFDRjtNQUNBLFNBQVM2UixhQUFhQSxDQUFBLEVBQUc7UUFDdkIsSUFBSVYsYUFBYSxFQUFFO1VBQ2pCUixJQUFJLENBQUNTLFFBQVEsR0FBRyxDQUFDVCxJQUFJLENBQUNTLFFBQVE7VUFDOUIsSUFBSVQsSUFBSSxDQUFDUyxRQUFRLEVBQUU7WUFDakJELGFBQWEsQ0FBQ3JSLFNBQVMsQ0FBQ00sR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUN2QytRLGFBQWEsQ0FBQ3JSLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDLFVBQVUsQ0FBQztVQUM1QyxDQUFDLE1BQU07WUFDTG1SLGFBQWEsQ0FBQ3JSLFNBQVMsQ0FBQ00sR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUN2QytRLGFBQWEsQ0FBQ3JSLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDLFVBQVUsQ0FBQztVQUM1QztRQUNGO01BQ0Y7TUFFQWlSLFVBQVUsQ0FBQ3ZSLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxZQUFNO1FBQ3pDNlIsVUFBVSxDQUFDLENBQUM7TUFDZCxDQUFDLENBQUM7TUFDRkwsVUFBVSxDQUFDeFIsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFlBQU07UUFDekNpUyxVQUFVLENBQUMsQ0FBQztNQUNkLENBQUMsQ0FBQztNQUNGLElBQUlSLGFBQWEsRUFBRTtRQUNqQkEsYUFBYSxDQUFDelIsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFlBQU07VUFDNUNtUyxhQUFhLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUM7TUFDSjtJQUNGLENBQUMsQ0FBQztFQUNKOztFQUVBOztFQUVBLFNBQVNDLFNBQVNBLENBQUN2VCxFQUFFLEVBQUU7SUFDckIsSUFBSUcsUUFBUSxDQUFDTSxnQkFBZ0IsQ0FBQ1QsRUFBRSxDQUFDLENBQUNSLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDNUMsSUFBTWdVLFFBQVEsR0FBR3JULFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUNULEVBQUUsQ0FBQztNQUU5Q3dULFFBQVEsQ0FBQzlTLE9BQU8sQ0FBQyxVQUFDK1MsT0FBTyxFQUFLO1FBQzVCQSxPQUFPLENBQUN0UyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsVUFBQzBDLENBQUMsRUFBSztVQUN2QzZDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLE9BQU8sQ0FBQztVQUNwQjlDLENBQUMsQ0FBQzZQLGVBQWUsQ0FBQyxDQUFDO1VBQ25CLElBQU1sQixVQUFVLEdBQUdySyxNQUFNLENBQUN0RSxDQUFDLENBQUMyQyxNQUFNLENBQUMsQ0FBQ2dILE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDcEwsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1VBRTVGb1EsVUFBVSxDQUFDbFEsUUFBUSxDQUFDLFlBQVksQ0FBQztVQUNqQ25DLFFBQVEsQ0FBQ3dULElBQUksQ0FBQ3BTLFNBQVMsQ0FBQ00sR0FBRyxDQUFDLGdCQUFnQixDQUFDO1VBQzdDMlEsVUFBVSxDQUFDL0YsT0FBTyxDQUFDO1lBQ2pCQyxPQUFPLEVBQUU7VUFDWCxDQUFDLEVBQUUsR0FBRyxDQUFDO1VBRVA4RixVQUFVLENBQUNwUSxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQ3dNLElBQUksQ0FBQyxLQUFLLEVBQUV6RyxNQUFNLENBQUNzTCxPQUFPLENBQUMsQ0FBQ3pJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztVQUMxRndILFVBQVUsQ0FBQ3BRLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDd00sSUFBSSxDQUFDLEtBQUssRUFBRXpHLE1BQU0sQ0FBQ3NMLE9BQU8sQ0FBQyxDQUFDekksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1VBRTFGLElBQU1vSCxJQUFJLEdBQUdJLFVBQVUsQ0FBQ3BRLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzJOLEdBQUcsQ0FBQyxDQUFDLENBQUM7VUFFbkRxQyxJQUFJLENBQUN3QixJQUFJLENBQUMsQ0FBQztVQUNYeEIsSUFBSSxDQUFDZSxJQUFJLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQztNQUNKLENBQUMsQ0FBQztJQUNKO0VBQ0Y7RUFFQSxTQUFTVSxTQUFTQSxDQUFDN1QsRUFBRSxFQUFFO0lBQ3JCLElBQUlHLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUNULEVBQUUsQ0FBQyxDQUFDUixNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQzVDLElBQU1zVSxTQUFTLEdBQUczVCxRQUFRLENBQUNNLGdCQUFnQixDQUFDVCxFQUFFLENBQUM7TUFFL0M4VCxTQUFTLENBQUNwVCxPQUFPLENBQUMsVUFBQ3FULFFBQVEsRUFBSztRQUM5QkEsUUFBUSxDQUFDNVMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFVBQUMwQyxDQUFDLEVBQUs7VUFDeENBLENBQUMsQ0FBQzZQLGVBQWUsQ0FBQyxDQUFDO1VBQ25CLElBQU1sQixVQUFVLEdBQUdySyxNQUFNLENBQUN0RSxDQUFDLENBQUMyQyxNQUFNLENBQUMsQ0FBQ2dILE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDcEwsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1VBRTVGb1EsVUFBVSxDQUFDclEsV0FBVyxDQUFDLFlBQVksQ0FBQztVQUNwQ2hDLFFBQVEsQ0FBQ3dULElBQUksQ0FBQ3BTLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1VBRWhEK1EsVUFBVSxDQUFDL0YsT0FBTyxDQUFDO1lBQ2pCQyxPQUFPLEVBQUU7VUFDWCxDQUFDLEVBQUUsR0FBRyxDQUFDO1VBRVAsSUFBTTBGLElBQUksR0FBR0ksVUFBVSxDQUFDcFEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDMk4sR0FBRyxDQUFDLENBQUMsQ0FBQztVQUVuRHFDLElBQUksQ0FBQ1UsS0FBSyxDQUFDLENBQUM7VUFDWlYsSUFBSSxDQUFDVyxXQUFXLEdBQUcsQ0FBQztRQUN0QixDQUFDLENBQUM7TUFDSixDQUFDLENBQUM7SUFDSjtFQUNGO0VBRUEsSUFBSWIsS0FBSyxDQUFDMVMsTUFBTSxHQUFHLENBQUMsRUFBRTtJQUNwQjJTLFFBQVEsQ0FBQyxDQUFDO0lBQ1ZJLFlBQVksQ0FBQyxDQUFDO0lBRWRnQixTQUFTLENBQUMsZ0JBQWdCLENBQUM7SUFDM0JNLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQztFQUM3QjtBQUNGOzs7Ozs7Ozs7Ozs7Ozs7QUNwS08sU0FBU0csZ0JBQWdCQSxDQUFDbkosSUFBSSxFQUFFO0VBRS9CdEwsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUM2SSxFQUFFLENBQUUsT0FBTyxFQUFFLFVBQUN2RSxDQUFDLEVBQUs7SUFFekNBLENBQUMsQ0FBQ3hDLGNBQWMsQ0FBQyxDQUFDO0lBQ2xCLElBQU15UCxNQUFNLEdBQUd2UixDQUFDLENBQUMscUJBQXFCLENBQUM7SUFDdkMsSUFBTTBVLE9BQU8sR0FBR25ELE1BQU0sQ0FBQ3hELElBQUksQ0FBQyxjQUFjLENBQUM7SUFDM0MsSUFBTTRHLEtBQUssR0FBR3BELE1BQU0sQ0FBQ3hELElBQUksQ0FBQyxZQUFZLENBQUM7SUFDdkMsSUFBTTZHLFFBQVEsR0FBR3JELE1BQU0sQ0FBQ3hELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUM5QyxJQUFNcEgsRUFBRSxHQUFHNEssTUFBTSxDQUFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNqQyxJQUFNOEcsV0FBVyxHQUFHN1UsQ0FBQyxDQUFDLGVBQWUsQ0FBQztJQUN0QyxJQUFNOFUsWUFBWSxHQUFHRCxXQUFXLENBQUNwSixJQUFJLENBQUMsVUFBVSxDQUFDOztJQUVqRDs7SUFFQSxJQUFNQSxJQUFJLEdBQUc7TUFDVHNKLE1BQU0sRUFBRSxvQkFBb0I7TUFDNUJwTyxFQUFFLEVBQUZBLEVBQUU7TUFDRitOLE9BQU8sRUFBUEEsT0FBTztNQUNQRSxRQUFRLEVBQVJBLFFBQVE7TUFDUkUsWUFBWSxFQUFaQTtJQUNKLENBQUM7SUFFRDlVLENBQUMsQ0FBQ3NMLElBQUksQ0FBQztNQUNIa0IsR0FBRyxFQUFFbEIsSUFBSSxDQUFDbUIsU0FBUztNQUNuQmhCLElBQUksRUFBRUEsSUFBSTtNQUNWdUosSUFBSSxFQUFFLE1BQU07TUFDWkMsVUFBVSxFQUFFLFNBQUFBLFdBQVVDLEdBQUcsRUFBRTtRQUN2QjNELE1BQU0sQ0FBQ3hPLFFBQVEsQ0FBQyxTQUFTLENBQUM7TUFDOUIsQ0FBQztNQUNEOEosT0FBTyxFQUFFLFNBQUFBLFFBQVVwQixJQUFJLEVBQUU7UUFDckIsSUFBS0EsSUFBSSxFQUFHO1VBQ1J6TCxDQUFDLENBQUM2VSxXQUFXLENBQUMsQ0FBQzlLLE1BQU0sQ0FBQzBCLElBQUksQ0FBQ3dCLE1BQU0sQ0FBQztVQUNsQ3NFLE1BQU0sQ0FBQ3hELElBQUksQ0FBQyxjQUFjLEVBQUV0QyxJQUFJLENBQUNpSixPQUFPLENBQUM7VUFDekNuRCxNQUFNLENBQUMzTyxXQUFXLENBQUMsU0FBUyxDQUFDO1VBQzdCLElBQUk2SSxJQUFJLENBQUNpSixPQUFPLElBQUlDLEtBQUssRUFBRTtZQUN2QnBELE1BQU0sQ0FBQy9ELElBQUksQ0FBQyxDQUFDO1VBQ2pCO1FBQ0osQ0FBQyxNQUFNO1VBQ0grRCxNQUFNLENBQUMvRCxJQUFJLENBQUMsQ0FBQztRQUNqQjtNQUNKO0lBQ0osQ0FBQyxDQUFDO0VBRU4sQ0FBQyxDQUFDO0FBRVY7Ozs7Ozs7Ozs7Ozs7O0FDOUNlLFNBQVMySCxpQkFBaUJBLENBQUEsRUFBRztFQUN4QyxJQUFNQyxTQUFTLEdBQUd4VSxRQUFRLENBQUNNLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDO0VBQ3BFLElBQU1tVSxZQUFZLEdBQUd6VSxRQUFRLENBQUNNLGdCQUFnQixDQUFDLHlCQUF5QixDQUFDO0VBQ3pFLElBQU1vVSxZQUFZLEdBQUcxVSxRQUFRLENBQUNNLGdCQUFnQixDQUFDLHdCQUF3QixDQUFDO0VBQ3hFLElBQU1xVSxjQUFjLEdBQUczVSxRQUFRLENBQUNNLGdCQUFnQixDQUFDLHdCQUF3QixDQUFDO0VBRTFFa1UsU0FBUyxDQUFDalUsT0FBTyxDQUFDLFVBQUNxVSxLQUFLLEVBQUs7SUFDekIsSUFBSUMsS0FBSyxHQUFHRCxLQUFLLENBQUN0VSxnQkFBZ0IsQ0FBQyxlQUFlLENBQUM7SUFFbkRtVSxZQUFZLENBQUNsVSxPQUFPLENBQUMsVUFBQ3VVLFdBQVcsRUFBSztNQUNsQ0osWUFBWSxDQUFDblUsT0FBTyxDQUFDLFVBQUF3VSxXQUFXLEVBQUk7UUFDaENBLFdBQVcsQ0FBQy9ULGdCQUFnQixDQUFDLE9BQU8sRUFBRSxZQUFNO1VBQ3hDNlQsS0FBSyxDQUFDdFUsT0FBTyxDQUFDLFVBQUNxRCxHQUFHLEVBQUs7WUFDbkJvUixVQUFVLENBQUNwUixHQUFHLEVBQUVrUixXQUFXLENBQUM7VUFDaEMsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDO01BQ04sQ0FBQyxDQUFDO01BRUZILGNBQWMsQ0FBQ3BVLE9BQU8sQ0FBQyxVQUFBMFUsYUFBYSxFQUFJO1FBQ3BDQSxhQUFhLENBQUNqVSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsWUFBTTtVQUMzQzZULEtBQUssQ0FBQ3RVLE9BQU8sQ0FBQyxVQUFDcUQsR0FBRyxFQUFLO1lBQ25Cb1IsVUFBVSxDQUFDcFIsR0FBRyxFQUFFa1IsV0FBVyxDQUFDO1VBQ2hDLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQztNQUNOLENBQUMsQ0FBQztNQUVGQSxXQUFXLENBQUM5VCxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsWUFBTTtRQUN4QzZULEtBQUssQ0FBQ3RVLE9BQU8sQ0FBQyxVQUFDcUQsR0FBRyxFQUFLO1VBQ25Cc1IsWUFBWSxDQUFDdFIsR0FBRyxFQUFFZ1IsS0FBSyxFQUFFRSxXQUFXLENBQUM7UUFDekMsQ0FBQyxDQUFDO01BQ04sQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDO0VBQ04sQ0FBQyxDQUFDOztFQUVGO0VBQ0EsU0FBU0ksWUFBWUEsQ0FBQzFVLElBQUksRUFBRW9VLEtBQUssRUFBRTdVLEdBQUcsRUFBRTtJQUNwQ1MsSUFBSSxDQUFDWSxTQUFTLENBQUMyTyxNQUFNLENBQUMsT0FBTyxDQUFDO0lBRTlCLElBQUl2UCxJQUFJLENBQUNZLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO01BQ2xDdEIsR0FBRyxDQUFDRSxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQ2lPLFNBQVMsR0FBRyxlQUFlO01BQ2xFbk8sR0FBRyxDQUFDcUIsU0FBUyxDQUFDTSxHQUFHLENBQUMsVUFBVSxDQUFDO0lBQ2pDLENBQUMsTUFBTTtNQUNIa1QsS0FBSyxDQUFDclQsY0FBYyxDQUFDO1FBQUNtQixRQUFRLEVBQUUsU0FBUztRQUFFbEIsS0FBSyxFQUFFO01BQU8sQ0FBQyxDQUFDO01BQzNEekIsR0FBRyxDQUFDRSxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQ2lPLFNBQVMsR0FBR25PLEdBQUcsQ0FBQ0UsYUFBYSxDQUFDLG1CQUFtQixDQUFDLENBQUN1UCxPQUFPLENBQUMxSixLQUFLO01BQ3ZHL0YsR0FBRyxDQUFDcUIsU0FBUyxDQUFDRSxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQ3BDO0VBQ0o7O0VBRUE7RUFDQSxTQUFTMFQsVUFBVUEsQ0FBQ3hVLElBQUksRUFBRVQsR0FBRyxFQUFFO0lBQzNCUyxJQUFJLENBQUNZLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUM5QnZCLEdBQUcsQ0FBQ0UsYUFBYSxDQUFDLG1CQUFtQixDQUFDLENBQUNpTyxTQUFTLEdBQUduTyxHQUFHLENBQUNFLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDdVAsT0FBTyxDQUFDMUosS0FBSztFQUMzRztBQUNKOzs7Ozs7Ozs7Ozs7OztBQ3JETyxTQUFTcVAsaUJBQWlCQSxDQUFBLEVBQUc7RUFFaEMsSUFBR25WLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLElBQUksRUFBRTtJQUFBLElBdUJwQ21WLG1CQUFtQixHQUE1QixTQUFTQSxtQkFBbUJBLENBQUMzVSxLQUFLLEVBQUM7TUFDakM0VSxhQUFhLENBQUM5VSxPQUFPLENBQUMsVUFBQytVLEtBQUssRUFBQ0MsTUFBTSxFQUFHO1FBQ3BDLElBQUc5VSxLQUFLLElBQUk4VSxNQUFNLEVBQUM7VUFDakJELEtBQUssQ0FBQ2xVLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDLFFBQVEsQ0FBQztVQUNoQyxJQUFJa1UsT0FBTyxHQUFHRixLQUFLLENBQUNyVixhQUFhLENBQUMsMkJBQTJCLENBQUM7VUFDOUR1VixPQUFPLENBQUMzVSxLQUFLLENBQUNGLE1BQU0sR0FBQyxLQUFLO1VBQzFCNlUsT0FBTyxDQUFDM1UsS0FBSyxDQUFDMEwsT0FBTyxHQUFHLEdBQUc7VUFDM0JpSixPQUFPLENBQUNwVSxTQUFTLENBQUNFLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDdEM7TUFDSixDQUFDLENBQUM7SUFDRixDQUFDO0lBaENELElBQU0rVCxhQUFhLEdBQUdyVixRQUFRLENBQUNNLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDO0lBQ3BFK1UsYUFBYSxDQUFDOVUsT0FBTyxDQUFDLFVBQUNDLElBQUksRUFBQ0MsS0FBSyxFQUFHO01BQ2xDRCxJQUFJLENBQUNRLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxZQUFXO1FBQ3hDUixJQUFJLENBQUNZLFNBQVMsQ0FBQzJPLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFFL0IsSUFBSTBGLFdBQVcsR0FBR2pWLElBQUksQ0FBQ1AsYUFBYSxDQUFDLDJCQUEyQixDQUFDO1FBQ2pFLElBQUdPLElBQUksQ0FBQ1ksU0FBUyxDQUFDQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUM7VUFDbkNvVSxXQUFXLENBQUM1VSxLQUFLLENBQUNGLE1BQU0sR0FBQyxNQUFNO1VBQy9CYyxVQUFVLENBQUMsWUFBTTtZQUNmZ1UsV0FBVyxDQUFDclUsU0FBUyxDQUFDTSxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ25DK1QsV0FBVyxDQUFDNVUsS0FBSyxDQUFDMEwsT0FBTyxHQUFHLEdBQUc7VUFDakMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUVULENBQUMsTUFBSTtVQUNEa0osV0FBVyxDQUFDNVUsS0FBSyxDQUFDRixNQUFNLEdBQUcsS0FBSztVQUNoQzhVLFdBQVcsQ0FBQzVVLEtBQUssQ0FBQzBMLE9BQU8sR0FBRyxHQUFHO1VBQy9Ca0osV0FBVyxDQUFDclUsU0FBUyxDQUFDRSxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ3hDO1FBQ0E4VCxtQkFBbUIsQ0FBQzNVLEtBQUssQ0FBQztNQUM1QixDQUFDLENBQUM7SUFDSixDQUFDLENBQUM7RUFhUjtBQUNKOzs7Ozs7Ozs7Ozs7Ozs7QUNyQ08sU0FBU2lWLFVBQVVBLENBQUEsRUFBRztFQUN6QixJQUFJQSxVQUFVLEdBQUd0VyxDQUFDLENBQUMsc0JBQXNCLENBQUM7RUFDdEMsSUFBR3NXLFVBQVUsQ0FBQ3JXLE1BQU0sRUFBQztJQUFBLElBQ1pzVyx3QkFBd0IsR0FBakMsU0FBU0Esd0JBQXdCQSxDQUFDQyxPQUFPLEVBQUV4RSxRQUFRLEVBQUU7TUFDakR3RSxPQUFPLENBQUNyVixPQUFPLENBQUMsVUFBQXNWLEtBQUssRUFBSTtRQUNyQixJQUFJQSxLQUFLLENBQUNDLGNBQWMsRUFBRTtVQUN0QixJQUFJQyxpQkFBaUIsR0FBRyxJQUFJQyxNQUFNLENBQUMsc0JBQXNCLEVBQUU7WUFDdkRDLGFBQWEsRUFBRSxNQUFNO1lBQ3JCO1lBQ0FDLElBQUksRUFBQyxJQUFJO1lBQ1RDLFlBQVksRUFBRSxFQUFFO1lBQ2hCaEUsUUFBUSxFQUFFO2NBQ05pRSxLQUFLLEVBQUUsQ0FBQztjQUNSQyxvQkFBb0IsRUFBRSxLQUFLO2NBQzNCQyxpQkFBaUIsRUFBRTtZQUN2QixDQUFDO1lBQ0RDLEtBQUssRUFBRTtVQUNYLENBQUMsQ0FBQztVQUVGLElBQUlDLG9CQUFvQixHQUFHLElBQUlSLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRTtZQUMxREMsYUFBYSxFQUFFLE1BQU07WUFDckI7WUFDQUMsSUFBSSxFQUFDLElBQUk7WUFDVEMsWUFBWSxFQUFFLEVBQUU7WUFDaEJoRSxRQUFRLEVBQUU7Y0FDTmlFLEtBQUssRUFBRSxDQUFDO2NBQ1JDLG9CQUFvQixFQUFFLEtBQUs7Y0FDM0JDLGlCQUFpQixFQUFFO1lBQ3ZCLENBQUM7WUFDREMsS0FBSyxFQUFFO1VBQ1gsQ0FBQyxDQUFDO1FBQ047TUFDSixDQUFDLENBQUM7SUFDTixDQUFDLEVBQ0Q7SUFDQSxJQUFJbkYsUUFBUSxHQUFHLElBQUlxRixvQkFBb0IsQ0FBQ2Qsd0JBQXdCLEVBQUU7TUFBRWUsU0FBUyxFQUFFO0lBQUUsQ0FBQyxDQUFDOztJQUVuRjs7SUFFQWhCLFVBQVUsQ0FBQzlULElBQUksQ0FBQyxZQUFXO01BQ3ZCd1AsUUFBUSxDQUFDRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1QixDQUFDLENBQUM7RUFFTjtBQUNKOzs7Ozs7Ozs7Ozs7OztBQzVDTyxTQUFTcUYsU0FBU0EsQ0FBQSxFQUFFO0VBQ3JCO0VBQ0EsSUFBTUMsU0FBUyxHQUFHNVcsUUFBUSxDQUFDTSxnQkFBZ0IsQ0FBQywrQ0FBK0MsQ0FBQzs7RUFFNUY7RUFDQXNXLFNBQVMsQ0FBQ3JXLE9BQU8sQ0FBQyxVQUFBQyxJQUFJLEVBQUk7SUFDeEI7SUFDQSxJQUFNcVcsSUFBSSxHQUFHclcsSUFBSSxDQUFDeUYsV0FBVzs7SUFFN0I7SUFDQSxJQUFJNlEsVUFBVSxHQUFHLEVBQUU7SUFDbkIsS0FBSyxJQUFJdEssQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHcUssSUFBSSxDQUFDeFgsTUFBTSxFQUFFbU4sQ0FBQyxFQUFFLEVBQUU7TUFDbEMsSUFBSXFLLElBQUksQ0FBQ3JLLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtRQUNqQnNLLFVBQVUsNkJBQUEvVixNQUFBLENBQTJCOFYsSUFBSSxDQUFDckssQ0FBQyxDQUFDLFlBQVM7TUFDekQsQ0FBQyxNQUFNO1FBQ0hzSyxVQUFVLGFBQUEvVixNQUFBLENBQWE4VixJQUFJLENBQUNySyxDQUFDLENBQUMsWUFBUztNQUMzQztJQUNKOztJQUVBO0lBQ0FoTSxJQUFJLENBQUMwTixTQUFTLEdBQUc0SSxVQUFVOztJQUUzQjtJQUNBLElBQU1DLFVBQVUsR0FBR3ZXLElBQUksQ0FBQ3dXLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDdkNELFVBQVUsQ0FBQzNWLFNBQVMsQ0FBQ00sR0FBRyxDQUFDLFFBQVEsQ0FBQzs7SUFFbEM7SUFDQWxCLElBQUksQ0FBQzhFLFVBQVUsQ0FBQ0MsWUFBWSxDQUFDd1IsVUFBVSxFQUFFdlcsSUFBSSxDQUFDeVcsV0FBVyxDQUFDO0VBQzVELENBQUMsQ0FBQztBQUNSOzs7Ozs7Ozs7Ozs7OztBQzdCTyxTQUFTQyxtQkFBbUJBLENBQUEsRUFBRztFQUVsQyxJQUFNQyxpQkFBaUIsR0FBR25YLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUMsNERBQTRELENBQUM7RUFFbkgsSUFBTThRLFFBQVEsR0FBRyxJQUFJcUYsb0JBQW9CLENBQUMsVUFBQ2IsT0FBTyxFQUFLO0lBQ3JEQSxPQUFPLENBQUNyVixPQUFPLENBQUMsVUFBQXNWLEtBQUssRUFBSTtNQUN2QixJQUFJQSxLQUFLLENBQUNDLGNBQWMsRUFBRTtRQUN4QjtRQUNBRCxLQUFLLENBQUN4UCxNQUFNLENBQUNqRixTQUFTLENBQUNFLE1BQU0sQ0FBQyxRQUFRLENBQUM7TUFDekMsQ0FBQyxNQUFNO1FBQ0w7UUFDQXVVLEtBQUssQ0FBQ3hQLE1BQU0sQ0FBQ2pGLFNBQVMsQ0FBQ00sR0FBRyxDQUFDLFFBQVEsQ0FBQztNQUN0QztJQUNGLENBQUMsQ0FBQztFQUNKLENBQUMsRUFBRTtJQUNEZ1YsU0FBUyxFQUFFO0VBQ2IsQ0FBQyxDQUFDO0VBRUZTLGlCQUFpQixDQUFDNVcsT0FBTyxDQUFDLFVBQUE2VyxPQUFPO0lBQUEsT0FBSWhHLFFBQVEsQ0FBQ0UsT0FBTyxDQUFDOEYsT0FBTyxDQUFDO0VBQUEsRUFBQztBQUNqRTs7Ozs7Ozs7Ozs7Ozs7QUNuQk8sU0FBU0MsaUJBQWlCQSxDQUFBLEVBQUc7RUFDaEMsSUFBTUMsR0FBRyxHQUFHdFgsUUFBUSxDQUFDcUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDO0VBRXhELElBQUlpVixHQUFHLEVBQUU7SUFBQSxJQUNJQyxXQUFXLEdBQXBCLFNBQVNBLFdBQVdBLENBQUEsRUFBRztNQUNuQixJQUFJQyxTQUFTLEdBQUd4WCxRQUFRLENBQUN3VCxJQUFJLENBQUN0RCxTQUFTLElBQUlsUSxRQUFRLENBQUN5WCxlQUFlLENBQUN2SCxTQUFTO1FBQ3pFdlAsTUFBTSxHQUFHWCxRQUFRLENBQUN5WCxlQUFlLENBQUNDLFlBQVksR0FBRzFYLFFBQVEsQ0FBQ3lYLGVBQWUsQ0FBQ0UsWUFBWTtRQUN0RkMsUUFBUSxHQUFJSixTQUFTLEdBQUc3VyxNQUFNLEdBQUksR0FBRztNQUN6QzJXLEdBQUcsQ0FBQ3pXLEtBQUssQ0FBQ2lRLEtBQUssR0FBRzhHLFFBQVEsR0FBRyxHQUFHO0lBQ3BDLENBQUM7SUFBQTtJQUVEdFYsTUFBTSxDQUFDdEIsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFlBQU07TUFDcEN1VyxXQUFXLENBQUMsQ0FBQztJQUNqQixDQUFDLENBQUM7RUFDTjtBQUNKOzs7Ozs7Ozs7Ozs7OztBQ2ZlLFNBQVNNLFNBQVNBLENBQUEsRUFBRztFQUVoQztFQUNBLElBQU1DLFFBQVEsR0FBRzlYLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUMsY0FBYyxDQUFDO0VBRTFEd1gsUUFBUSxDQUFDdlgsT0FBTyxDQUFDLFVBQUF3WCxPQUFPLEVBQUk7SUFDeEJBLE9BQU8sQ0FBQy9XLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxZQUFNO01BQ3BDZ1gsV0FBVyxDQUFDRCxPQUFPLENBQUM7SUFDeEIsQ0FBQyxDQUFDO0lBRUZBLE9BQU8sQ0FBQy9XLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxVQUFBQyxLQUFLLEVBQUk7TUFDekMsSUFBSUEsS0FBSyxDQUFDa0MsR0FBRyxLQUFLLE9BQU8sRUFBRTtRQUN2QjZVLFdBQVcsQ0FBQ0QsT0FBTyxDQUFDO01BQ3hCO0lBQ0osQ0FBQyxDQUFDO0VBQ04sQ0FBQyxDQUFDO0VBRUYsU0FBU0MsV0FBV0EsQ0FBQ0QsT0FBTyxFQUFFO0lBQzFCRCxRQUFRLENBQUN2WCxPQUFPLENBQUMsVUFBQTBYLFlBQVksRUFBSTtNQUM3QkEsWUFBWSxDQUFDN1csU0FBUyxDQUFDRSxNQUFNLENBQUMsV0FBVyxDQUFDO01BQzFDLElBQU00VyxPQUFPLEdBQUdELFlBQVksQ0FBQ2hZLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQztNQUNqRSxJQUFJaVksT0FBTyxFQUFFO1FBQ1RBLE9BQU8sQ0FBQzlXLFNBQVMsQ0FBQ00sR0FBRyxDQUFDLFNBQVMsQ0FBQztNQUNwQztJQUNKLENBQUMsQ0FBQztJQUVGcVcsT0FBTyxDQUFDM1csU0FBUyxDQUFDTSxHQUFHLENBQUMsV0FBVyxDQUFDO0lBQ2xDLElBQU15VyxhQUFhLEdBQUdKLE9BQU8sQ0FBQzlYLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQztJQUNsRSxJQUFJa1ksYUFBYSxFQUFFO01BQ2ZBLGFBQWEsQ0FBQy9XLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDLFNBQVMsQ0FBQztJQUM3QztFQUNKOztFQUVBO0VBQ0EsSUFBTThXLE9BQU8sR0FBR3BZLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUMsb0JBQW9CLENBQUM7RUFFL0Q4WCxPQUFPLENBQUM3WCxPQUFPLENBQUMsVUFBQW9RLE1BQU0sRUFBSTtJQUN0QkEsTUFBTSxDQUFDM1AsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFlBQVk7TUFDekMsSUFBTXFYLFNBQVMsR0FBRyxJQUFJLENBQUNuSixPQUFPLENBQUMsYUFBYSxDQUFDO01BQzdDLElBQU1vSixXQUFXLEdBQUdELFNBQVMsQ0FBQ3BZLGFBQWEsQ0FBQyw2QkFBNkIsQ0FBQzs7TUFFMUU7TUFDQXFZLFdBQVcsQ0FBQ2xYLFNBQVMsQ0FBQzJPLE1BQU0sQ0FBQyxTQUFTLENBQUM7O01BRXZDO01BQ0EsSUFBTXdJLFVBQVUsR0FBRyxJQUFJLENBQUN0WSxhQUFhLENBQUMsUUFBUSxDQUFDO01BQy9Dc1ksVUFBVSxDQUFDdFMsV0FBVyxHQUFHcVMsV0FBVyxDQUFDbFgsU0FBUyxDQUFDQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsNEJBQTRCLEdBQUcsY0FBYzs7TUFFbEg7TUFDQSxJQUFJLENBQUNELFNBQVMsQ0FBQzJPLE1BQU0sQ0FBQyxTQUFTLENBQUM7O01BRWhDO01BQ0EsSUFBSXVJLFdBQVcsQ0FBQ2xYLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQzNDZ1gsU0FBUyxDQUFDOVcsY0FBYyxDQUFDO1VBQUNtQixRQUFRLEVBQUUsU0FBUztVQUFFbEIsS0FBSyxFQUFFO1FBQU8sQ0FBQyxDQUFDO01BQ25FO0lBQ0osQ0FBQyxDQUFDO0VBQ04sQ0FBQyxDQUFDO0FBRU47QUFBQzs7Ozs7Ozs7Ozs7Ozs7QUMxRE0sU0FBU2dYLFVBQVVBLENBQUEsRUFBRztFQUN6QixJQUFHeFksUUFBUSxDQUFDQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxJQUFJLEVBQUM7SUFVaEQ7SUFBQSxJQUNTd1ksYUFBYSxHQUF0QixTQUFTQSxhQUFhQSxDQUFBLEVBQUc7TUFDekIsT0FBTyxjQUFjLElBQUluVyxNQUFNLElBQUlvVyxTQUFTLENBQUNDLGNBQWMsR0FBRyxDQUFDLElBQUlELFNBQVMsQ0FBQ0UsZ0JBQWdCLEdBQUcsQ0FBQztJQUNqRyxDQUFDO0lBQUEsSUFFUUMsY0FBYyxHQUF2QixTQUFTQSxjQUFjQSxDQUFDQyxVQUFVLEVBQUU7TUFDcEMsSUFBTUMsY0FBYyxHQUFLQyxRQUFRLENBQUNDLFdBQVcsR0FBRyxFQUFFLEdBQUksR0FBSTtNQUMxRCxJQUFNQyxXQUFXLEdBQUdKLFVBQVUsR0FBR0ssVUFBVSxHQUFHQSxVQUFVLEdBQUcsQ0FBQztNQUM1RCxJQUFNQyxpQkFBaUIsR0FBR0YsV0FBVyxHQUFHSCxjQUFjOztNQUV0RDtNQUNBTSxjQUFjLEdBQUdqUCxJQUFJLENBQUNSLEdBQUcsQ0FBQyxDQUFDLEVBQUVRLElBQUksQ0FBQ1gsR0FBRyxDQUFDMlAsaUJBQWlCLEVBQUVFLFNBQVMsQ0FBQyxDQUFDO01BQ3BFQyxhQUFhLENBQUMxWSxLQUFLLENBQUMyWSxTQUFTLGtCQUFBelksTUFBQSxDQUFrQnNZLGNBQWMsUUFBSztNQUVsRSxJQUFHUCxVQUFVLEdBQUcsQ0FBQyxFQUFDO1FBQ2R2QixXQUFXLENBQUMxVyxLQUFLLENBQUM0WSxLQUFLLE1BQUExWSxNQUFBLENBQU9vWSxVQUFVLEdBQUcsR0FBRyxPQUFJO01BQ3RELENBQUMsTUFBSTtRQUNENUIsV0FBVyxDQUFDMVcsS0FBSyxDQUFDNFksS0FBSyxNQUFBMVksTUFBQSxDQUFPLENBQUNzWSxjQUFjLEdBQUlGLFVBQVUsR0FBRyxHQUFJLElBQUksQ0FBQyxDQUFDLE9BQUk7TUFDaEY7TUFDQTVTLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDc1MsVUFBVSxDQUFDO01BQ3ZCO01BQ0FZLE1BQU0sQ0FBQ25aLE9BQU8sQ0FBQyxVQUFDb1osS0FBSyxFQUFFbFosS0FBSyxFQUFLO1FBQzdCLElBQUlBLEtBQUssSUFBSXFZLFVBQVUsRUFBRTtVQUN6QmEsS0FBSyxDQUFDdlksU0FBUyxDQUFDTSxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQzdCLENBQUMsTUFBTTtVQUNQaVksS0FBSyxDQUFDdlksU0FBUyxDQUFDRSxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2hDO01BQ0osQ0FBQyxDQUFDO01BR0ZzWSxrQkFBa0IsR0FBR1AsY0FBYztJQUNuQyxDQUFDO0lBeENELElBQU1MLFFBQVEsR0FBR2haLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLFdBQVcsQ0FBQztJQUNwRCxJQUFNc1osYUFBYSxHQUFHdlosUUFBUSxDQUFDQyxhQUFhLENBQUMsa0JBQWtCLENBQUM7SUFDaEUsSUFBTXlaLE1BQU0sR0FBRzFaLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUMsZUFBZSxDQUFDO0lBQ3pELElBQU02WSxVQUFVLEdBQUdPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ0csV0FBVyxDQUFDLENBQUM7SUFDMUMsSUFBSVIsY0FBYyxHQUFHLENBQUM7SUFDdEIsSUFBSUMsU0FBUyxHQUFHQyxhQUFhLENBQUNPLFdBQVcsR0FBR2QsUUFBUSxDQUFDQyxXQUFXO0lBQ2hFLElBQUlXLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQU1yQyxXQUFXLEdBQUd2WCxRQUFRLENBQUNDLGFBQWEsQ0FBQyxXQUFXLENBQUM7SUFtQ3ZELElBQUksQ0FBQ3dZLGFBQWEsQ0FBQyxDQUFDLEVBQUU7TUFDdEI7TUFDQU8sUUFBUSxDQUFDaFksZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFVBQUMwQyxDQUFDLEVBQUs7UUFDdEM7UUFDQSxJQUFNcVcsWUFBWSxHQUFHclcsQ0FBQyxDQUFDc1csTUFBTTtRQUM3QixJQUFNQyxTQUFTLEdBQUdGLFlBQVksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsSUFBTUcsZUFBZSxHQUFHWixTQUFTLEdBQUdELGNBQWM7UUFDbEQ7UUFDQUEsY0FBYyxJQUFJWSxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUM7O1FBRWxDO1FBQ0FaLGNBQWMsR0FBR2pQLElBQUksQ0FBQ1IsR0FBRyxDQUFDLENBQUMsRUFBRVEsSUFBSSxDQUFDWCxHQUFHLENBQUM0UCxjQUFjLEVBQUVDLFNBQVMsQ0FBQyxDQUFDOztRQUVqRTtRQUNBQyxhQUFhLENBQUMxWSxLQUFLLENBQUMyWSxTQUFTLGtCQUFBelksTUFBQSxDQUFrQnNZLGNBQWMsUUFBSzs7UUFHbEU7UUFDQSxJQUFJQSxjQUFjLEtBQUssQ0FBQyxJQUFJQSxjQUFjLEtBQUtDLFNBQVMsRUFBRTtVQUMxRDVWLENBQUMsQ0FBQ3hDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xCOztRQUVBO1FBQ0EsSUFBSW1ZLGNBQWMsS0FBSyxDQUFDLElBQUlBLGNBQWMsS0FBS0MsU0FBUyxFQUFFO1VBQzFEO1FBQUEsQ0FDQyxNQUFNO1VBQ1A7UUFBQTs7UUFHQTtRQUNBLElBQU1QLGNBQWMsR0FBS0MsUUFBUSxDQUFDQyxXQUFXLEdBQUcsRUFBRSxHQUFJLEdBQUk7UUFDMURTLE1BQU0sQ0FBQ25aLE9BQU8sQ0FBQyxVQUFDb1osS0FBSyxFQUFFbFosS0FBSyxFQUFLO1VBQ2pDLElBQU0wWixVQUFVLEdBQUcxWixLQUFLLEdBQUcwWSxVQUFVO1VBQ3JDLElBQU1pQixRQUFRLEdBQUdELFVBQVUsR0FBR2hCLFVBQVU7VUFDeEMsSUFBTUQsV0FBVyxHQUFHLENBQUNpQixVQUFVLEdBQUdDLFFBQVEsSUFBSSxDQUFDO1VBRS9DLElBQUlMLFlBQVksR0FBRyxDQUFDLElBQUlWLGNBQWMsR0FBR04sY0FBYyxJQUFJb0IsVUFBVSxJQUFJUCxrQkFBa0IsR0FBR2IsY0FBYyxHQUFHb0IsVUFBVSxFQUFFO1lBQ3ZIO1lBQ0FSLEtBQUssQ0FBQ3ZZLFNBQVMsQ0FBQ00sR0FBRyxDQUFDLFFBQVEsQ0FBQztVQUNqQyxDQUFDLE1BQU0sSUFBSXFZLFlBQVksR0FBRyxDQUFDLElBQUlWLGNBQWMsR0FBR04sY0FBYyxJQUFJb0IsVUFBVSxJQUFJUCxrQkFBa0IsR0FBR2IsY0FBYyxHQUFHb0IsVUFBVSxFQUFFO1lBQzlIO1lBQ0FSLEtBQUssQ0FBQ3ZZLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDLFFBQVEsQ0FBQztVQUNwQztVQUNBLElBQUdiLEtBQUssR0FBRyxDQUFDLEVBQUM7WUFDVDhXLFdBQVcsQ0FBQzFXLEtBQUssQ0FBQzRZLEtBQUssTUFBQTFZLE1BQUEsQ0FBT29ZLFVBQVUsR0FBRyxHQUFHLE9BQUk7VUFDdEQsQ0FBQyxNQUFJO1lBQ0Q1QixXQUFXLENBQUMxVyxLQUFLLENBQUM0WSxLQUFLLE1BQUExWSxNQUFBLENBQU8sQ0FBQ3NZLGNBQWMsR0FBSUYsVUFBVSxHQUFHLEdBQUksSUFBSSxDQUFDLENBQUMsT0FBSTtVQUNoRjtVQUFDO1FBQ0QsQ0FBQyxDQUFDOztRQUVGO1FBQ0FTLGtCQUFrQixHQUFHUCxjQUFjO01BQ3ZDLENBQUMsQ0FBQzs7TUFFRjtNQUNBSyxNQUFNLENBQUNuWixPQUFPLENBQUMsVUFBQ29aLEtBQUssRUFBRWxaLEtBQUssRUFBSztRQUM3QmtaLEtBQUssQ0FBQzNZLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxZQUFNO1VBQ3RDNlgsY0FBYyxDQUFDcFksS0FBSyxDQUFDO1FBQ3JCLENBQUMsQ0FBQztNQUNOLENBQUMsQ0FBQztJQUNGLENBQUMsTUFBSztNQUFBLElBdUJHNFosaUJBQWlCLEdBQTFCLFNBQVNBLGlCQUFpQkEsQ0FBQSxFQUFHO1FBQ3pCLElBQU1DLFFBQVEsR0FBSXRCLFFBQVEsQ0FBQ3VCLFVBQVUsR0FBR2pCLFNBQVMsR0FBSSxJQUFJO1FBQ3pEL0IsV0FBVyxDQUFDMVcsS0FBSyxDQUFDaVEsS0FBSyxNQUFBL1AsTUFBQSxDQUFNdVosUUFBUSxPQUFJO01BQzdDLENBQUMsRUFDRztNQTFCSjtNQUNBLElBQU1FLGVBQWUsR0FBRztRQUNwQkMsSUFBSSxFQUFFekIsUUFBUTtRQUNkdEMsU0FBUyxFQUFFLEdBQUcsQ0FBQztNQUNuQixDQUFDO01BRUQsSUFBTWdFLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQUk5RSxPQUFPLEVBQUs7UUFDbENBLE9BQU8sQ0FBQ3JWLE9BQU8sQ0FBQyxVQUFBc1YsS0FBSyxFQUFJO1VBQ3pCLElBQUlBLEtBQUssQ0FBQ0MsY0FBYyxFQUFFO1lBQ3RCRCxLQUFLLENBQUN4UCxNQUFNLENBQUNqRixTQUFTLENBQUNNLEdBQUcsQ0FBQyxRQUFRLENBQUM7VUFDeEMsQ0FBQyxNQUFNO1lBQ0htVSxLQUFLLENBQUN4UCxNQUFNLENBQUNqRixTQUFTLENBQUNFLE1BQU0sQ0FBQyxRQUFRLENBQUM7VUFDM0M7UUFDQSxDQUFDLENBQUM7TUFDTixDQUFDO01BRUQsSUFBTThQLFFBQVEsR0FBRyxJQUFJcUYsb0JBQW9CLENBQUNpRSxnQkFBZ0IsRUFBRUYsZUFBZSxDQUFDO01BRTVFZCxNQUFNLENBQUNuWixPQUFPLENBQUMsVUFBQW9aLEtBQUssRUFBSTtRQUNwQnZJLFFBQVEsQ0FBQ0UsT0FBTyxDQUFDcUksS0FBSyxDQUFDO01BQzNCLENBQUMsQ0FBQztNQU9FWCxRQUFRLENBQUNoWSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUVxWixpQkFBaUIsQ0FBQzs7TUFFdEQ7TUFDQUEsaUJBQWlCLENBQUMsQ0FBQztJQUN2QjtFQUNKO0FBQ0o7Ozs7Ozs7Ozs7Ozs7OztBQzFJQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTyxTQUFTTSxZQUFZQSxDQUFDOWEsRUFBRSxFQUFFO0VBQy9CLElBQU1FLEdBQUcsR0FBR0MsUUFBUSxDQUFDQyxhQUFhLENBQUNKLEVBQUUsQ0FBQztFQUN0QyxJQUFNK2EsVUFBVSxHQUFHNWEsUUFBUSxDQUFDQyxhQUFhLENBQUMsZUFBZSxDQUFDO0VBQzFELElBQU00YSxXQUFXLEdBQUc3YSxRQUFRLENBQUNDLGFBQWEsQ0FBQyxlQUFlLENBQUM7RUFDM0QsSUFBTTZhLFNBQVMsR0FBRzlhLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLGNBQWMsQ0FBQztFQUN4RCxJQUFNOGEsZUFBZSxHQUFHL1MsTUFBTSxDQUFDLHFCQUFxQixDQUFDO0VBR3JELElBQUlqSSxHQUFHLEVBQUU7SUFDUEEsR0FBRyxDQUFDaUIsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFVBQUNDLEtBQUssRUFBSztNQUN2Q0EsS0FBSyxDQUFDQyxjQUFjLENBQUMsQ0FBQztNQUN0QixJQUFJbkIsR0FBRyxDQUFDMFEsWUFBWSxDQUFDLGVBQWUsQ0FBQyxLQUFLLE9BQU8sRUFBRTtRQUNqRHVLLFVBQVUsQ0FBQyxDQUFDO01BQ2QsQ0FBQyxNQUFNO1FBQ0xDLFdBQVcsQ0FBQyxDQUFDO01BQ2Y7SUFDRixDQUFDLENBQUM7SUFFRixJQUFJSixXQUFXLEVBQUU7TUFBQSxJQUNOSyxRQUFRLEdBQWpCLFNBQVNBLFFBQVFBLENBQUNqYSxLQUFLLEVBQUU7UUFDdkI0WixXQUFXLENBQUN6WCxLQUFLLEdBQUcsRUFBRTtNQUN4QixDQUFDO01BQ0R5WCxXQUFXLENBQUM3WixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUVrYSxRQUFRLENBQUM7SUFDakQ7RUFFRjtFQUNBO0VBQ0FsYixRQUFRLENBQUNnQixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsVUFBQ0MsS0FBSyxFQUFLO0lBQzVDLElBQUksQ0FBQ0EsS0FBSyxDQUFDb0YsTUFBTSxDQUFDNkksT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUU7TUFDM0M7TUFDQSxJQUFJblAsR0FBRyxFQUFFO1FBQ1AsSUFBSUEsR0FBRyxDQUFDMFEsWUFBWSxDQUFDLGVBQWUsQ0FBQyxLQUFLLE1BQU0sRUFBRTtVQUNoRHdLLFdBQVcsQ0FBQyxDQUFDO1FBQ2Y7TUFDRjtJQUNGLENBQUMsTUFBTTtNQUNMO0lBQUE7RUFFSixDQUFDLEVBQUUsS0FBSyxDQUFDO0VBRVQsU0FBU0EsV0FBV0EsQ0FBQSxFQUFHO0lBQ3JCTCxVQUFVLENBQUN4WixTQUFTLENBQUNFLE1BQU0sQ0FBQyxXQUFXLENBQUM7SUFDeEN2QixHQUFHLENBQUNvYixZQUFZLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQztJQUMxQ0osZUFBZSxDQUFDL1ksV0FBVyxDQUFDLFFBQVEsQ0FBQztJQUNyQzZZLFdBQVcsQ0FBQ00sWUFBWSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM7SUFDMUNMLFNBQVMsQ0FBQ0ssWUFBWSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM7RUFDMUM7RUFFQSxTQUFTSCxVQUFVQSxDQUFBLEVBQUc7SUFDcEJKLFVBQVUsQ0FBQ3haLFNBQVMsQ0FBQ00sR0FBRyxDQUFDLFdBQVcsQ0FBQztJQUNyQzNCLEdBQUcsQ0FBQ29iLFlBQVksQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDO0lBQ3pDTixXQUFXLENBQUNPLGVBQWUsQ0FBQyxVQUFVLENBQUM7SUFDdkNQLFdBQVcsQ0FBQ3pYLEtBQUssR0FBRyxFQUFFO0lBQ3RCMFgsU0FBUyxDQUFDTSxlQUFlLENBQUMsVUFBVSxDQUFDO0lBQ3JDO0lBQ0FwVCxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUNxVCxLQUFLLENBQUMsQ0FBQztFQUNqQztBQUNGOzs7Ozs7Ozs7Ozs7Ozs7QUM5RE8sU0FBU0MsV0FBV0EsQ0FBQSxFQUFHO0VBSTFCLElBQU1DLE1BQU0sR0FBR3ZiLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLFVBQVUsQ0FBQztFQUNqRCxJQUFJc2IsTUFBTSxFQUFFO0lBV1I7SUFBQSxJQUNTQyxhQUFhLEdBQXRCLFNBQVNBLGFBQWFBLENBQUEsRUFBRztNQUNyQkQsTUFBTSxDQUFDbmEsU0FBUyxDQUFDMk8sTUFBTSxDQUFDLElBQUksQ0FBQztNQUM3QjBMLE1BQU0sQ0FBQ3JhLFNBQVMsQ0FBQzJPLE1BQU0sQ0FBQyxJQUFJLENBQUM7TUFDN0IsSUFBSTJMLFFBQVEsRUFBRTtRQUNWQSxRQUFRLENBQUN0YSxTQUFTLENBQUMyTyxNQUFNLENBQUMsT0FBTyxDQUFDO01BQ3RDO0lBQ0osQ0FBQztJQUFBLElBRVE0TCxVQUFVLEdBQW5CLFNBQVNBLFVBQVVBLENBQUEsRUFBRztNQUNsQkosTUFBTSxDQUFDbmEsU0FBUyxDQUFDTSxHQUFHLENBQUMsSUFBSSxDQUFDO01BQzFCK1osTUFBTSxDQUFDcmEsU0FBUyxDQUFDTSxHQUFHLENBQUMsSUFBSSxDQUFDO01BQzFCLElBQUlnYSxRQUFRLEVBQUU7UUFDVkEsUUFBUSxDQUFDdGEsU0FBUyxDQUFDMk8sTUFBTSxDQUFDLE9BQU8sQ0FBQztNQUN0QztJQUNKLENBQUMsRUFHRDtJQUFBLElBQ1M2TCxhQUFhLEdBQXRCLFNBQVNBLGFBQWFBLENBQUEsRUFBRztNQUNyQkwsTUFBTSxDQUFDbmEsU0FBUyxDQUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDO01BQzdCbWEsTUFBTSxDQUFDcmEsU0FBUyxDQUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDO01BQzdCLElBQUlvYSxRQUFRLEVBQUU7UUFDVkEsUUFBUSxDQUFDdGEsU0FBUyxDQUFDRSxNQUFNLENBQUMsT0FBTyxDQUFDO01BQ3RDO0lBQ0osQ0FBQyxFQUVEO0lBQUEsSUFDU3VhLFdBQVcsR0FBcEIsU0FBU0EsV0FBV0EsQ0FBQSxFQUFHO01BQ25CRCxhQUFhLENBQUMsQ0FBQztNQUNmRSxZQUFZLENBQUNDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDLEVBSUQ7SUFBQSxJQUNTQyxpQkFBaUIsR0FBMUIsU0FBU0EsaUJBQWlCQSxDQUFBLEVBQUc7TUFDekIsSUFBSSxDQUFDRixZQUFZLENBQUNHLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRTtRQUN0Q3hhLFVBQVUsQ0FBQ2thLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ2xDO0lBQ0osQ0FBQyxFQUVEO0lBU0E7SUFBQSxJQUNTTyxrQkFBa0IsR0FBM0IsU0FBU0Esa0JBQWtCQSxDQUFDdEcsT0FBTyxFQUFFeEUsUUFBUSxFQUFFO01BQzNDd0UsT0FBTyxDQUFDclYsT0FBTyxDQUFDLFVBQUFzVixLQUFLLEVBQUk7UUFDckIsSUFBSUEsS0FBSyxDQUFDQyxjQUFjLEVBQUU7VUFDdEI7VUFDQTJGLE1BQU0sQ0FBQ3JhLFNBQVMsQ0FBQ00sR0FBRyxDQUFDLFVBQVUsQ0FBQztVQUNoQzZaLE1BQU0sQ0FBQ25hLFNBQVMsQ0FBQ00sR0FBRyxDQUFDLFVBQVUsQ0FBQztRQUNwQyxDQUFDLE1BQU07VUFDSDtVQUNBK1osTUFBTSxDQUFDcmEsU0FBUyxDQUFDRSxNQUFNLENBQUMsVUFBVSxDQUFDO1VBQ25DaWEsTUFBTSxDQUFDbmEsU0FBUyxDQUFDRSxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ3ZDO01BQ0osQ0FBQyxDQUFDO0lBQ04sQ0FBQyxFQUVEO0lBNUVBLElBQUk2YSxTQUFTLEdBQUcvYyxDQUFDLENBQUMseUJBQXlCLENBQUM7SUFFNUMsSUFBTXNjLFFBQVEsR0FBRzFiLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLGFBQWEsQ0FBQztJQUN0RGtjLFNBQVMsQ0FBQ3RhLE1BQU0sQ0FBQyxDQUFDLENBQUNvSCxPQUFPLENBQUMsa0lBQWtJLENBQUM7SUFFOUosSUFBTXdTLE1BQU0sR0FBR3piLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLGVBQWUsQ0FBQztJQUV0RHNiLE1BQU0sQ0FBQ25hLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUM5Qm1hLE1BQU0sQ0FBQ3JhLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDLEtBQUssQ0FBQztJQTZDOUJtYSxNQUFNLENBQUN6YSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUV3YSxhQUFhLENBQUM7O0lBRS9DO0lBQ0F4YixRQUFRLENBQUNDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDZSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU2YSxXQUFXLENBQUM7O0lBRW5GO0lBQ0FHLGlCQUFpQixDQUFDLENBQUM7SUFrQm5CLElBQU01SyxRQUFRLEdBQUcsSUFBSXFGLG9CQUFvQixDQUFDeUYsa0JBQWtCLEVBQUU7TUFDMUR6QixJQUFJLEVBQUUsSUFBSTtNQUFFO01BQ1ovRCxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ2pCLENBQUMsQ0FBQzs7SUFFRjtJQUNBLElBQU0wRixNQUFNLEdBQUdwYyxRQUFRLENBQUNDLGFBQWEsQ0FBQyxlQUFlLENBQUM7O0lBRXREO0lBQ0FtUixRQUFRLENBQUNFLE9BQU8sQ0FBQzhLLE1BQU0sQ0FBQztFQUU1Qjs7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsSUFBSUMsY0FBYyxHQUFHLEtBQUs7O0VBRTFCO0VBQ0EsSUFBSUMsbUJBQW1CLEdBQUcsS0FBSzs7RUFFL0I7RUFDQSxJQUFJQyxnQkFBZ0I7O0VBRXBCO0VBQ0EsU0FBU0MsU0FBU0EsQ0FBQSxFQUFHO0lBQ2pCLElBQU1DLE1BQU0sR0FBR3pjLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLHFCQUFxQixDQUFDO0lBQzVELElBQUl3YyxNQUFNLEVBQUU7TUFDUkEsTUFBTSxDQUFDcmIsU0FBUyxDQUFDTSxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQ2hDO0VBQ0o7O0VBRUE7RUFDQVksTUFBTSxDQUFDdEIsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFlBQVk7SUFDMUMsSUFBSSxDQUFDc2IsbUJBQW1CLEVBQUU7TUFDdEJBLG1CQUFtQixHQUFHLElBQUk7TUFDMUJJLFVBQVUsQ0FBQyxDQUFDO0lBQ2hCO0VBQ0osQ0FBQyxDQUFDOztFQUVGO0VBQ0FwYSxNQUFNLENBQUN0QixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsWUFBWTtJQUN6QyxJQUFJLENBQUNzYixtQkFBbUIsRUFBRTtNQUN0QkEsbUJBQW1CLEdBQUcsSUFBSTtNQUMxQkksVUFBVSxDQUFDLENBQUM7SUFDaEI7RUFDSixDQUFDLENBQUM7O0VBRUY7RUFDQSxTQUFTQSxVQUFVQSxDQUFBLEVBQUc7SUFDbEIsSUFBSSxDQUFDTCxjQUFjLEVBQUU7TUFDakJFLGdCQUFnQixHQUFHOWEsVUFBVSxDQUFDLFlBQU07UUFDaEM0YSxjQUFjLEdBQUcsSUFBSTtRQUNyQkcsU0FBUyxDQUFDLENBQUM7TUFDZixDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNmO0VBQ0o7QUFDSjs7Ozs7Ozs7Ozs7Ozs7QUN6Sk8sU0FBU0csYUFBYUEsQ0FBQSxFQUFHO0VBQzVCLElBQU1DLE9BQU8sR0FBRzVjLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUMsV0FBVyxDQUFDO0VBRXRELElBQUdnQyxNQUFNLENBQUN1YSxVQUFVLEdBQUcsSUFBSSxFQUFFO0lBQUEsSUFjaEJDLGlCQUFpQixHQUExQixTQUFTQSxpQkFBaUJBLENBQUNqVSxJQUFJLEVBQUUyRCxDQUFDLEVBQUU7TUFDaEMsSUFBRzNELElBQUksSUFBSTJELENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDZjNELElBQUksQ0FBQ2hJLEtBQUssQ0FBQzJZLFNBQVMsR0FBRyxjQUFjLEdBQUdoTixDQUFDLEdBQUcsR0FBRyxHQUFHLFFBQVE7TUFDOUQ7SUFDSixDQUFDO0lBakJELElBQUdvUSxPQUFPLENBQUN2ZCxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ25CdWQsT0FBTyxDQUFDcmMsT0FBTyxDQUFDLFVBQUN3YyxNQUFNLEVBQUs7UUFDeEIsSUFBSXBPLElBQUksR0FBR29PLE1BQU0sQ0FBQ3pjLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDO1FBQ3ZELElBQUkwYyxZQUFZLEdBQUdELE1BQU0sQ0FBQzljLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQztRQUVqRTBPLElBQUksQ0FBQ3BPLE9BQU8sQ0FBQyxVQUFDQyxJQUFJLEVBQUVnTSxDQUFDLEVBQUs7VUFDdEJoTSxJQUFJLENBQUNRLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxZQUFNO1lBQ2pDOGIsaUJBQWlCLENBQUNFLFlBQVksRUFBRXhRLENBQUMsQ0FBQztVQUN0QyxDQUFDLENBQUM7UUFDTixDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7SUFDTjtFQU9KO0FBQ0o7Ozs7Ozs7Ozs7Ozs7OztBQ3hCTyxTQUFTeVEsYUFBYUEsQ0FBQSxFQUFHO0VBRTVCalYsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUN0SSxLQUFLLENBQUMsWUFBWTtJQUMxQ3NJLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDa1YsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUNoRGxWLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQ2tWLFdBQVcsQ0FBQyxXQUFXLENBQUM7RUFDekMsQ0FBQyxDQUFDO0VBRUZsVixNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQ2lKLFVBQVUsQ0FBQyxZQUFZO0lBQy9DakosTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM3RixRQUFRLENBQUMsTUFBTSxDQUFDO0lBQzdDNkYsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDN0YsUUFBUSxDQUFDLFdBQVcsQ0FBQztFQUN0QyxDQUFDLENBQUM7RUFFRjZGLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDZ0osVUFBVSxDQUFDLFlBQVk7SUFDL0NoSixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUNoRyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQ2hDZ0csTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUNoRyxXQUFXLENBQUMsV0FBVyxDQUFDO0VBQ3hELENBQUMsQ0FBQztBQUVOOzs7Ozs7Ozs7Ozs7Ozs7QUNqQjJEO0FBRTNELElBQU1vYixjQUFjLEdBQUcsU0FBakJBLGNBQWNBLENBQUEsRUFBUztFQUN6QkQsd0VBQWdCLENBQUMsQ0FBQztBQUN0QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FDSnlFO0FBRTFFLElBQU1HLFdBQVcsR0FBRyxRQUFRO0FBQzVCLElBQU1DLGlCQUFpQixHQUFHLGlCQUFpQjtBQUMzQyxJQUFNQyxjQUFjLEdBQUd4ZCxRQUFRLENBQUNNLGdCQUFnQixDQUFDaWQsaUJBQWlCLENBQUM7QUFFbkUsSUFBTUosZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FBQSxFQUFTO0VBQzNCLElBQUlNLFVBQVUsR0FBRyxFQUFFO0VBQ25CLElBQUlDLGdCQUFnQixHQUFHLEVBQUU7RUFFekJGLGNBQWMsQ0FBQ2pkLE9BQU8sQ0FBRSxVQUFDb2QsR0FBRyxFQUFFblIsQ0FBQyxFQUFLO0lBQ2hDLElBQUlvUixLQUFLLE1BQUE3YyxNQUFBLENBQU11YyxXQUFXLE9BQUF2YyxNQUFBLENBQUl5TCxDQUFDLENBQUU7SUFDakMsSUFBSXFSLE1BQU0sT0FBQTljLE1BQUEsQ0FBTzZjLEtBQUssQ0FBRTtJQUN4QkQsR0FBRyxDQUFDeEMsWUFBWSxDQUFDLElBQUksRUFBRXlDLEtBQUssQ0FBQztJQUU3QkgsVUFBVSxDQUFDalIsQ0FBQyxDQUFDLEdBQUcsSUFBSTZRLCtFQUFjLENBQUNRLE1BQU0sQ0FBQztFQUM5QyxDQUFDLENBQUM7QUFDTixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUNqQk0sU0FBU0MsY0FBY0EsQ0FBQSxFQUFHO0VBQy9CLElBQU1DLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBb0JBLENBQUEsRUFBUztJQUNqQyxJQUFNQyxZQUFZLEdBQUdoZSxRQUFRLENBQUNDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQztJQUNoRSxJQUFNc1gsV0FBVyxHQUFHdlgsUUFBUSxDQUFDQyxhQUFhLENBQUMsb0JBQW9CLENBQUM7SUFDaEUsSUFBTWdlLE1BQU0sR0FBR2plLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLHVCQUF1QixDQUFDO0lBRTlELElBQUlnZSxNQUFNLEtBQUtELFlBQVksSUFBSXpHLFdBQVcsQ0FBQyxFQUFFO01BQzNDLElBQU0yRyxTQUFTLEdBQUdGLFlBQVksR0FBR0EsWUFBWSxDQUFDcGQsWUFBWSxHQUFHLENBQUM7TUFDOUQsSUFBTXVkLGNBQWMsR0FBRzVHLFdBQVcsR0FBR0EsV0FBVyxDQUFDM1csWUFBWSxHQUFHLENBQUM7TUFDakUsSUFBTXdkLFdBQVcsR0FBR0YsU0FBUyxHQUFHQyxjQUFjO01BQzlDRixNQUFNLENBQUNwZCxLQUFLLENBQUN3ZCxXQUFXLENBQUMsbUJBQW1CLEtBQUF0ZCxNQUFBLENBQUtxZCxXQUFXLE9BQUksQ0FBQztJQUNuRTtFQUNGLENBQUM7RUFFRCxJQUFNRSxnQkFBZ0IsR0FBRyxJQUFJak4sZ0JBQWdCLENBQUMsWUFBTTtJQUNsRDBNLG9CQUFvQixDQUFDLENBQUM7RUFDeEIsQ0FBQyxDQUFDO0VBRUYsSUFBTVEsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBSW5ILE9BQU8sRUFBSztJQUN0QyxJQUFJQSxPQUFPLEVBQUU7TUFDWCxJQUFNb0gsY0FBYyxHQUFHLElBQUlDLGNBQWMsQ0FBQyxZQUFNO1FBQzlDVixvQkFBb0IsQ0FBQyxDQUFDO01BQ3hCLENBQUMsQ0FBQztNQUNGUyxjQUFjLENBQUNsTixPQUFPLENBQUM4RixPQUFPLENBQUM7SUFDakM7RUFDRixDQUFDO0VBRURrSCxnQkFBZ0IsQ0FBQ2hOLE9BQU8sQ0FBQ3RSLFFBQVEsQ0FBQ3dULElBQUksRUFBRTtJQUN0Qy9CLFNBQVMsRUFBRSxJQUFJO0lBQ2ZpTixPQUFPLEVBQUU7RUFDWCxDQUFDLENBQUM7RUFFRlgsb0JBQW9CLENBQUMsQ0FBQztFQUV0QlEsa0JBQWtCLENBQUN2ZSxRQUFRLENBQUNDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0VBQy9Ec2Usa0JBQWtCLENBQUN2ZSxRQUFRLENBQUNDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQ2xFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BDcUQ7QUFDRztBQUNJO0FBQ2I7QUFDSztBQUVwRCxJQUFNK2UsV0FBVyxHQUFHLFNBQWRBLFdBQVdBLENBQUEsRUFBUztFQUN0Qkwsa0VBQVcsQ0FBQyxDQUFDO0VBQ2JDLHFFQUFhLENBQUMsQ0FBQztFQUNmQyx5RUFBZSxDQUFDLENBQUM7RUFDakJDLDREQUFRLENBQUMsQ0FBQztFQUNWQyxpRUFBTyxDQUFDLENBQUM7RUFFVCxJQUFNRSxTQUFTLEdBQUc3ZixDQUFDLENBQUMsZ0JBQWdCLENBQUM7RUFDckMsSUFBRzZmLFNBQVMsRUFBRTtJQUFBLElBQ0xDLGVBQWUsR0FBeEIsU0FBU0EsZUFBZUEsQ0FBQ3RKLE9BQU8sRUFBRXhFLFFBQVEsRUFBRTtNQUN4Q3dFLE9BQU8sQ0FBQ3JWLE9BQU8sQ0FBQyxVQUFBc1YsS0FBSyxFQUFJO1FBQ3JCLElBQUlBLEtBQUssQ0FBQ0MsY0FBYyxFQUFFO1VBRXRCLElBQUlxSixjQUFjLEdBQUcsSUFBSW5KLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtZQUM5Q0MsYUFBYSxFQUFFLENBQUM7WUFDaEJFLFlBQVksRUFBRSxDQUFDO1lBQ2ZELElBQUksRUFBQyxLQUFLO1lBRVZrSixXQUFXLEVBQUU7Y0FDVCxHQUFHLEVBQUU7Z0JBQ0RuSixhQUFhLEVBQUUsQ0FBQztnQkFDaEJFLFlBQVksRUFBRSxDQUFDO2dCQUNmRCxJQUFJLEVBQUMsS0FBSztnQkFDVm1KLG1CQUFtQixFQUFFLElBQUk7Z0JBQ3pCM0ksU0FBUyxFQUFDO2NBRWQ7WUFDSjtVQUNKLENBQUMsQ0FBQztVQUVGdEYsUUFBUSxDQUFDa08sU0FBUyxDQUFDekosS0FBSyxDQUFDeFAsTUFBTSxDQUFDO1FBQ3BDO01BQ0osQ0FBQyxDQUFDO0lBQ04sQ0FBQyxFQUNEO0lBQ0EsSUFBSStLLFFBQVEsR0FBRyxJQUFJcUYsb0JBQW9CLENBQUN5SSxlQUFlLEVBQUU7TUFBRXhJLFNBQVMsRUFBRTtJQUFFLENBQUMsQ0FBQzs7SUFFMUU7O0lBRUF1SSxTQUFTLENBQUNyZCxJQUFJLENBQUMsWUFBVztNQUN0QndQLFFBQVEsQ0FBQ0UsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDO0VBQ0Y7QUFFSixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2xERDtBQUNBO0FBQ0E7O0FBRW9FO0FBQ1M7QUFDSjtBQUNVO0FBQ0o7QUFDL0I7QUFDbUI7QUFDa0M7O0FBR3JHO0FBQ0EsSUFBTXlPLFlBQVksR0FBRyxvQkFBb0I7QUFDekMsSUFBTUMsWUFBWSxHQUFHLHFCQUFxQjtBQUMxQyxJQUFNQyxhQUFhLEdBQUcsZUFBZTs7QUFFckM7QUFDQSxJQUFNQyxhQUFhLEdBQUdsZ0IsUUFBUSxDQUFDTSxnQkFBZ0IsQ0FBQzBmLFlBQVksQ0FBQztBQUU3RCxJQUFNbkIsZUFBZSxHQUFHLFNBQWxCQSxlQUFlQSxDQUFBLEVBQVM7RUFDMUI7O0VBRUEsSUFBSXNCLGdCQUFnQixHQUFHLEVBQUU7RUFDekIsSUFBSUMsVUFBVSxHQUFHLEVBQUU7RUFDbkIsSUFBSUMsZ0JBQWdCLEdBQUcsRUFBRTtFQUN6QixJQUFJQyxZQUFZLEdBQUcsRUFBRTtFQUNyQixJQUFJQyxTQUFTO0VBQ2IsSUFBSUMsZUFBZSxHQUFHLEVBQUU7RUFDeEIsSUFBSUMsa0JBQWtCLEdBQUcsRUFBRTtFQUUzQixJQUFJQyxzQkFBc0IsR0FBRyxJQUFJO0VBRWpDUixhQUFhLENBQUMzZixPQUFPLENBQUUsVUFBQ1ksTUFBTSxFQUFFcUwsQ0FBQyxFQUFLO0lBQ2xDMlQsZ0JBQWdCLENBQUMzVCxDQUFDLENBQUMsR0FBRztNQUNsQm1VLGNBQWMsRUFBRSxJQUFJO01BQ3BCdlAsUUFBUSxFQUFFLElBQUk7TUFBRXdQLGNBQWMsRUFBRSxJQUFJO01BQ3BDQyxlQUFlLEVBQUMsSUFBSTtNQUVwQkMsVUFBVSxFQUFFO1FBQ1JqaEIsRUFBRSxFQUFFLHVCQUF1QjtRQUMzQmtoQixTQUFTLEVBQUU7TUFDZjtJQUNKLENBQUM7SUFDRFYsZ0JBQWdCLENBQUM3VCxDQUFDLENBQUMsR0FBRztNQUNsQmhNLElBQUksRUFBRSxlQUFlO01BQ3JCd2dCLE1BQU0sRUFBRSxXQUFXO01BQ25CM1IsT0FBTyxFQUFFO0lBQ2IsQ0FBQztJQUVELElBQUdsTyxNQUFNLENBQUNDLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7TUFDN0NvZixrQkFBa0IsQ0FBQ2pVLENBQUMsQ0FBQyxHQUFHO1FBQ3BCeUosYUFBYSxFQUFFLE1BQU07UUFDckJFLFlBQVksRUFBRSxFQUFFO1FBQ2hCd0ssY0FBYyxFQUFFLElBQUk7UUFDcEJ6SyxJQUFJLEVBQUUsSUFBSTtRQUNWbUosbUJBQW1CLEVBQUUsSUFBSTtRQUN6QmpPLFFBQVEsRUFBRSxJQUFJO1FBQUV3UCxjQUFjLEVBQUU7TUFDcEMsQ0FBQztJQUNMLENBQUMsTUFBTTtNQUNISCxrQkFBa0IsQ0FBQ2pVLENBQUMsQ0FBQyxHQUFHO1FBQ3BCMkosWUFBWSxFQUFFLEVBQUU7UUFDaEJGLGFBQWEsRUFBRSxNQUFNO1FBQ3JCZ0wsUUFBUSxFQUFFLElBQUk7UUFDZHZLLFNBQVMsRUFBRSxFQUFFO1FBQ2J3SyxtQkFBbUIsRUFBRSxJQUFJO1FBQ3pCQyxZQUFZLEVBQUUsY0FBYztRQUM1Qi9QLFFBQVEsRUFBRSxJQUFJO1FBQUV3UCxjQUFjLEVBQUU7TUFDcEMsQ0FBQztJQUNMO0lBR0EsSUFBSVEsUUFBUSxHQUFHeEIsMkRBQVcsQ0FBQ3plLE1BQU0sQ0FBQ3NQLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBRXJFLElBQUk0USxRQUFRLE1BQUF0Z0IsTUFBQSxDQUFNZ2YsWUFBWSxPQUFBaGYsTUFBQSxDQUFJeUwsQ0FBQyxDQUFFO0lBQ3JDckwsTUFBTSxDQUFDZ2EsWUFBWSxDQUFDLElBQUksRUFBRWtHLFFBQVEsQ0FBQztJQUVuQyxJQUFJQyxZQUFZLEdBQUduZ0IsTUFBTSxDQUFDK04sT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUU5QyxJQUFHb1MsWUFBWSxFQUFFO01BQ2JmLFNBQVMsR0FBR2UsWUFBWSxDQUFDcmhCLGFBQWEsQ0FBQ2dnQixhQUFhLENBQUM7SUFDekQ7SUFFQSxJQUFJc0Isb0JBQW9CO0lBQ3hCLElBQUdoQixTQUFTLEVBQUU7TUFDVixJQUFHYSxRQUFRLEVBQUU7UUFDVCxJQUFJSSxjQUFjLEdBQUcsNEJBQTRCLEdBQUdoVixDQUFDO1FBQ3JEK1QsU0FBUyxDQUFDcEYsWUFBWSxDQUFDLElBQUksRUFBRXFHLGNBQWMsQ0FBQztRQUM1Q0Qsb0JBQW9CLEdBQUcsR0FBRyxHQUFHQyxjQUFjO01BRS9DLENBQUMsTUFDSTtRQUNELElBQUlDLFdBQVcsR0FBRyx5QkFBeUIsR0FBR2pWLENBQUM7UUFDL0MrVCxTQUFTLENBQUNwRixZQUFZLENBQUMsSUFBSSxFQUFFc0csV0FBVyxDQUFDO1FBQ3pDcEIsZ0JBQWdCLENBQUM3VCxDQUFDLENBQUMsQ0FBQzRLLE9BQU8sR0FBRyxHQUFHLEdBQUdxSyxXQUFXO01BQ25EO0lBQ0o7SUFFQXRCLGdCQUFnQixDQUFDM1QsQ0FBQyxDQUFDLEdBQUdxVCw4RUFBUSxDQUFDMWUsTUFBTSxFQUFFZ2YsZ0JBQWdCLENBQUMzVCxDQUFDLENBQUMsQ0FBQztJQUMzRDJULGdCQUFnQixDQUFDM1QsQ0FBQyxDQUFDLEdBQUdnVCxzRkFBWSxDQUFDcmUsTUFBTSxFQUFFZ2YsZ0JBQWdCLENBQUMzVCxDQUFDLENBQUMsQ0FBQztJQUMvRDJULGdCQUFnQixDQUFDM1QsQ0FBQyxDQUFDLEdBQUdpVCxrRkFBWSxDQUFDdGUsTUFBTSxFQUFFZ2YsZ0JBQWdCLENBQUMzVCxDQUFDLENBQUMsQ0FBQztJQUMvRDJULGdCQUFnQixDQUFDM1QsQ0FBQyxDQUFDLEdBQUdrVCw0RkFBZSxDQUFDdmUsTUFBTSxFQUFFZ2YsZ0JBQWdCLENBQUMzVCxDQUFDLENBQUMsQ0FBQztJQUNsRTJULGdCQUFnQixDQUFDM1QsQ0FBQyxDQUFDLEdBQUdzVCw4R0FBc0IsQ0FBQzNlLE1BQU0sRUFBRWdmLGdCQUFnQixDQUFDM1QsQ0FBQyxDQUFDLENBQUM7O0lBRXpFO0lBQ0EyVCxnQkFBZ0IsQ0FBQzNULENBQUMsQ0FBQyxHQUFHbVQsMEZBQWMsQ0FBQ3hlLE1BQU0sRUFBRWdmLGdCQUFnQixDQUFDM1QsQ0FBQyxDQUFDLEVBQUV1VCxZQUFZLEVBQUV2VCxDQUFDLENBQUM7SUFFbEYsSUFBRzRVLFFBQVEsRUFBRTtNQUVUWixlQUFlLENBQUNoVSxDQUFDLENBQUMsR0FBRyxJQUFJd0osTUFBTSxDQUFDdUwsb0JBQW9CLEVBQUVkLGtCQUFrQixDQUFDalUsQ0FBQyxDQUFDLENBQUM7TUFFNUUyVCxnQkFBZ0IsQ0FBQzNULENBQUMsQ0FBQyxDQUFDa1YsTUFBTSxHQUFHLENBQUMsQ0FBQztNQUMvQnZCLGdCQUFnQixDQUFDM1QsQ0FBQyxDQUFDLENBQUNrVixNQUFNLENBQUNDLE1BQU0sR0FBR25CLGVBQWUsQ0FBQ2hVLENBQUMsQ0FBQztNQUV0RDJULGdCQUFnQixDQUFDM1QsQ0FBQyxDQUFDLENBQUNvVixpQkFBaUIsR0FBRyxzQ0FBc0M7O01BRTlFO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFPUTtJQUVBeEIsVUFBVSxDQUFDNVQsQ0FBQyxDQUFDLEdBQUcsSUFBSXdKLE1BQU0sQ0FBQzdVLE1BQU0sRUFBRWdmLGdCQUFnQixDQUFDM1QsQ0FBQyxDQUFDLENBQUM7O0lBRXZEO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztJQUlRLElBQUcrVCxTQUFTLEVBQUU7TUFDVixJQUFHSCxVQUFVLENBQUM1VCxDQUFDLENBQUMsQ0FBQ3FWLFdBQVcsRUFBRTtRQUMxQnZCLFlBQVksQ0FBQzlULENBQUMsQ0FBQyxHQUFHLElBQUkrUyx5RUFBYyxDQUFDYSxVQUFVLENBQUM1VCxDQUFDLENBQUMsRUFBRTZULGdCQUFnQixDQUFDN1QsQ0FBQyxDQUFDLENBQUM7UUFDeEUsSUFBTXNWLGdCQUFnQixHQUFHMUIsVUFBVSxDQUFDNVQsQ0FBQyxDQUFDLENBQUMzTSxFQUFFO1FBQ3pDLElBQU1raUIsU0FBUyxHQUFHRCxnQkFBZ0IsQ0FBQzdoQixhQUFhLENBQUMsMEJBQTBCLENBQUM7UUFFNUUsSUFBRzhoQixTQUFTLEVBQUU7VUFDVnpCLFlBQVksQ0FBQzlULENBQUMsQ0FBQyxDQUFDbVYsTUFBTSxDQUFDMVosRUFBRSxDQUFDLGFBQWEsRUFBRSxZQUFZO1lBQ2pEOFosU0FBUyxDQUFDbGhCLEtBQUssQ0FBQzJZLFNBQVMsR0FBRyxjQUFjLEdBQUc4RyxZQUFZLENBQUM5VCxDQUFDLENBQUMsQ0FBQ21WLE1BQU0sQ0FBQ0ssV0FBVyxHQUFHLEdBQUcsR0FBRyxRQUFRO1VBQ3BHLENBQUMsQ0FBQztRQUNOO01BQ0o7SUFDSjtFQUVKLENBQUMsQ0FBQztBQUVOLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyS0Q7QUFDQTtBQUNBOztBQUVBLElBQU1sRCxRQUFRLEdBQUcsU0FBWEEsUUFBUUEsQ0FBQSxFQUFTO0VBRW5CLElBQU1tRCxVQUFVLEdBQUc3aUIsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO0VBRXhDLElBQUc2aUIsVUFBVSxFQUFFO0lBQUEsSUFDRkMsMEJBQTBCLEdBQW5DLFNBQVNBLDBCQUEwQkEsQ0FBQ3RNLE9BQU8sRUFBRXhFLFFBQVEsRUFBRTtNQUNuRHdFLE9BQU8sQ0FBQ3JWLE9BQU8sQ0FBQyxVQUFBc1YsS0FBSyxFQUFJO1FBQ3JCLElBQUlBLEtBQUssQ0FBQ0MsY0FBYyxFQUFFO1VBRXRCLElBQUlxTSxlQUFlLEdBQUduaUIsUUFBUSxDQUFDTSxnQkFBZ0IsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDakIsTUFBTTtVQUM5RixJQUFJK2lCLFVBQVUsR0FBR2hZLElBQUksQ0FBQ0MsS0FBSyxDQUFFOFgsZUFBZSxHQUFHLENBQUMsR0FBRyxDQUFFLENBQUM7VUFHdEQsSUFBSUUsUUFBUSxHQUFHLElBQUlyTSxNQUFNLENBQUMsWUFBWSxFQUFFO1lBQ3BDRyxZQUFZLEVBQUUsRUFBRTtZQUNoQkYsYUFBYSxFQUFFLENBQUM7WUFDaEJnTCxRQUFRLEVBQUUsSUFBSTtZQUNkQyxtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCUCxjQUFjLEVBQUUsSUFBSTtZQUNwQnRCLG1CQUFtQixFQUFDLElBQUk7WUFDeEJpRCxjQUFjLEVBQUUsSUFBSTtZQUNwQjVMLFNBQVMsRUFBQyxFQUFFO1lBQ1owSSxXQUFXLEVBQUU7Y0FDVCxHQUFHLEVBQUU7Z0JBQ0RuSixhQUFhLEVBQUUsQ0FBQztnQkFDaEJFLFlBQVksRUFBRSxFQUFFO2dCQUNoQjhLLFFBQVEsRUFBRSxJQUFJO2dCQUNkQyxtQkFBbUIsRUFBRSxJQUFJO2dCQUN6QlAsY0FBYyxFQUFFLEtBQUs7Z0JBQ3JCdEIsbUJBQW1CLEVBQUMsSUFBSTtnQkFDeEJpRCxjQUFjLEVBQUUsS0FBSztnQkFDckI1TCxTQUFTLEVBQUM7Y0FDZDtZQUVKO1VBQ0osQ0FBQyxDQUFDO1VBQ0YsSUFBSW9JLFNBQVEsR0FBRyxJQUFJOUksTUFBTSxDQUFDLFlBQVksRUFBRTtZQUNwQ3VNLFVBQVUsRUFBRSxJQUFJO1lBQ2hCcFEsUUFBUSxFQUFDLEtBQUs7WUFDZHFRLFVBQVUsRUFBRTtjQUNSQyxNQUFNLEVBQUUsaUJBQWlCO2NBQ3pCQyxNQUFNLEVBQUU7WUFDWixDQUFDO1lBQ0RoQixNQUFNLEVBQUU7Y0FDSkMsTUFBTSxFQUFFVTtZQUNaOztZQUVBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1VBRUosQ0FBQyxDQUFDOztVQUVGO1VBQ0E7VUFDQTVnQixVQUFVLENBQUMsWUFBTTtZQUNicWQsU0FBUSxDQUFDNkQsT0FBTyxDQUFDUCxVQUFVLENBQUM7VUFDaEMsQ0FBQyxFQUFFLElBQUksQ0FBQztVQUdSLElBQUlRLFFBQVEsR0FBRyxJQUFJNU0sTUFBTSxDQUFDLFlBQVksRUFBRTtZQUNwQ0csWUFBWSxFQUFFLEVBQUU7WUFDaEJGLGFBQWEsRUFBRSxDQUFDO1lBQ2hCZ0wsUUFBUSxFQUFFLElBQUk7WUFDZEMsbUJBQW1CLEVBQUUsSUFBSTtZQUN6QlAsY0FBYyxFQUFFLElBQUk7WUFDcEJ0QixtQkFBbUIsRUFBQyxJQUFJO1lBQ3hCRCxXQUFXLEVBQUU7Y0FDVCxHQUFHLEVBQUU7Z0JBQ0RuSixhQUFhLEVBQUUsQ0FBQztnQkFDaEJFLFlBQVksRUFBRSxFQUFFO2dCQUNoQjhLLFFBQVEsRUFBRSxJQUFJO2dCQUNkQyxtQkFBbUIsRUFBRSxJQUFJO2dCQUN6QlAsY0FBYyxFQUFFLEtBQUs7Z0JBQ3JCdEIsbUJBQW1CLEVBQUM7Y0FDeEI7WUFFSjtVQUNKLENBQUMsQ0FBQztVQUVGLElBQUl3RCxRQUFRLEdBQUcsSUFBSTdNLE1BQU0sQ0FBQyxZQUFZLEVBQUU7WUFDcEN3TSxVQUFVLEVBQUU7Y0FDUkMsTUFBTSxFQUFFLGlCQUFpQjtjQUN6QkMsTUFBTSxFQUFFO1lBQ1osQ0FBQztZQUNEaEIsTUFBTSxFQUFFO2NBQ0pDLE1BQU0sRUFBRWlCO1lBQ1o7VUFDSixDQUFDLENBQUM7VUFDRnhSLFFBQVEsQ0FBQ2tPLFNBQVMsQ0FBQ3pKLEtBQUssQ0FBQ3hQLE1BQU0sQ0FBQztRQUNwQztNQUNKLENBQUMsQ0FBQztJQUNOLENBQUMsRUFDRDtJQUNBLElBQUkrSyxRQUFRLEdBQUcsSUFBSXFGLG9CQUFvQixDQUFDeUwsMEJBQTBCLEVBQUU7TUFBRXhMLFNBQVMsRUFBRTtJQUFFLENBQUMsQ0FBQzs7SUFFckY7O0lBRUF1TCxVQUFVLENBQUNyZ0IsSUFBSSxDQUFDLFlBQVc7TUFDdkJ3UCxRQUFRLENBQUNFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVCLENBQUMsQ0FBQzs7SUFFRjtJQUNBO0VBRUo7RUFFQSxJQUFJd1IsYUFBYSxHQUFHMWpCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztFQUN2QyxJQUFHMGpCLGFBQWEsRUFBQztJQUFBLElBRUpDLDBCQUEwQixHQUFuQyxTQUFTQSwwQkFBMEJBLENBQUNuTixPQUFPLEVBQUV4RSxRQUFRLEVBQUU7TUFDbkR3RSxPQUFPLENBQUNyVixPQUFPLENBQUMsVUFBQXNWLEtBQUssRUFBSTtRQUNyQixJQUFJQSxLQUFLLENBQUNDLGNBQWMsRUFBRTtVQUcxQixJQUFJa04sUUFBUSxHQUFHLElBQUloTixNQUFNLENBQUMscUJBQXFCLEVBQUU7WUFDN0NDLGFBQWEsRUFBRSxDQUFDO1lBQ2hCRSxZQUFZLEVBQUUsRUFBRTtZQUNoQjtZQUNBO1lBQ0FPLFNBQVMsRUFBRSxFQUFFO1lBQ2IySSxtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCO1lBQ0FpRCxjQUFjLEVBQUUsS0FBSztZQUNyQkUsVUFBVSxFQUFFO2NBQ1JDLE1BQU0sRUFBRSxVQUFVO2NBQ2xCQyxNQUFNLEVBQUU7WUFDWixDQUFDO1lBQ0R0RCxXQUFXLEVBQUU7Y0FDVCxHQUFHLEVBQUU7Z0JBQ0xuSixhQUFhLEVBQUUsTUFBTTtnQkFDckJxTSxjQUFjLEVBQUUsSUFBSTtnQkFDcEI1TCxTQUFTLEVBQUU7Z0JBQ1g7Y0FDQTtZQUVKO1VBRUosQ0FBQyxDQUFDO1VBQ0ZzTSxRQUFRLENBQUMvYSxFQUFFLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FFdkMsQ0FBQyxDQUFDO1VBQ0YsSUFBSWdiLFFBQVEsR0FBRyxJQUFJak4sTUFBTSxDQUFDLG9CQUFvQixFQUFFO1lBQzVDQyxhQUFhLEVBQUUsQ0FBQztZQUNoQjtZQUNBO1lBQ0E7WUFDQTtZQUNBc00sVUFBVSxFQUFFLElBQUk7WUFDaEJDLFVBQVUsRUFBRTtjQUNSQyxNQUFNLEVBQUUsVUFBVTtjQUNsQkMsTUFBTSxFQUFFO1lBQ1osQ0FBQztZQUNEaEIsTUFBTSxFQUFFO2NBQ0pDLE1BQU0sRUFBRXFCO1lBQ1osQ0FBQztZQUNEL2EsRUFBRSxFQUFFO2NBQ0FpYixXQUFXLEVBQUUsU0FBQUEsWUFBQSxFQUFZO2dCQUVyQixJQUFNQyxNQUFNLEdBQUduakIsUUFBUSxDQUFDQyxhQUFhLENBQUMsU0FBUyxDQUFDO2dCQUVoRCxJQUFJSSxZQUFZLEdBQUc0aUIsUUFBUSxDQUFDakIsV0FBVztnQkFDdkMsSUFBSW9CLFVBQVUsR0FBR2hrQixDQUFDLENBQUMsa0NBQWtDLENBQUMsQ0FBQ2lCLFlBQVksQ0FBQztnQkFDcEUsSUFBSWdqQixVQUFVLEdBQUdELFVBQVUsQ0FBQ0MsVUFBVTtnQkFDdEMsSUFBSUMsT0FBTyxHQUFHRixVQUFVLENBQUN2SixXQUFXO2dCQUNwQ3NKLE1BQU0sQ0FBQ3RpQixLQUFLLENBQUM0QixJQUFJLE1BQUExQixNQUFBLENBQVFzaUIsVUFBVSxHQUFJQyxPQUFPLEdBQUcsQ0FBRSxHQUFJLEVBQUUsT0FBSztnQkFDOURILE1BQU0sQ0FBQy9oQixTQUFTLENBQUNNLEdBQUcsQ0FBQyxRQUFRLENBQUM7Z0JBQzlCRCxVQUFVLENBQUMsWUFBTTtrQkFDYjBoQixNQUFNLENBQUMvaEIsU0FBUyxDQUFDRSxNQUFNLENBQUMsUUFBUSxDQUFDO2dCQUNyQyxDQUFDLEVBQUUsR0FBRyxDQUFDO2NBQ1A7WUFDUjtVQUNKLENBQUMsQ0FBQztVQUNGLElBQU1paUIsVUFBVSxHQUFHdmpCLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUMsYUFBYSxDQUFDO1VBRTNEaWpCLFVBQVUsQ0FBQ2hqQixPQUFPLENBQUMsVUFBVWlqQixTQUFTLEVBQUUvaUIsS0FBSyxFQUFFO1lBQzNDLElBQU0waUIsTUFBTSxHQUFHSyxTQUFTLENBQUN2akIsYUFBYSxDQUFDLFNBQVMsQ0FBQztZQUNqRCxJQUFNd2pCLEtBQUssR0FBR0QsU0FBUyxDQUFDbGpCLGdCQUFnQixDQUFDLDZCQUE2QixDQUFDO1lBQ3ZFLElBQU1vakIsVUFBVSxHQUFHRixTQUFTLENBQUN2akIsYUFBYSxDQUFDLDBDQUEwQyxDQUFDO1lBRXRGLElBQUlvakIsVUFBVSxHQUFHSyxVQUFVLENBQUNMLFVBQVU7WUFDdEMsSUFBSUMsT0FBTyxHQUFHSSxVQUFVLENBQUM3SixXQUFXO1lBQ3BDc0osTUFBTSxDQUFDdGlCLEtBQUssQ0FBQzRCLElBQUksTUFBQTFCLE1BQUEsQ0FBUXNpQixVQUFVLEdBQUlDLE9BQU8sR0FBRyxDQUFFLEdBQUksRUFBRSxPQUFLO1VBR2xFLENBQUMsQ0FBQztVQUNGbFMsUUFBUSxDQUFDa08sU0FBUyxDQUFDekosS0FBSyxDQUFDeFAsTUFBTSxDQUFDO1FBQ3BDO01BQ0osQ0FBQyxDQUFDO0lBQ0YsQ0FBQyxFQUNEO0lBQ0EsSUFBSStLLFFBQVEsR0FBRyxJQUFJcUYsb0JBQW9CLENBQUNzTSwwQkFBMEIsRUFBRTtNQUFFck0sU0FBUyxFQUFFO0lBQUUsQ0FBQyxDQUFDOztJQUVyRjs7SUFFQW9NLGFBQWEsQ0FBQ2xoQixJQUFJLENBQUMsWUFBVztNQUMxQndQLFFBQVEsQ0FBQ0UsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDO0VBQ047RUFHQWxTLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDTSxLQUFLLENBQUMsWUFBWTtJQUNyQ04sQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDa0MsTUFBTSxDQUFDLENBQUM7RUFDL0IsQ0FBQyxDQUFDO0FBQ04sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZORDtBQUNBO0FBQ0E7QUFDaUU7O0FBRWpFO0FBQ0EsSUFBTXNpQixRQUFRLEdBQUcsa0JBQWtCO0FBQ25DLElBQU1DLFdBQVcsR0FBRyxvQkFBb0I7O0FBRXhDO0FBQ0EsSUFBTUMsZUFBZSxHQUFHOWpCLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUNzakIsUUFBUSxDQUFDO0FBQzNELElBQU1HLHFCQUFxQixHQUFHL2pCLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUN1akIsV0FBVyxDQUFDO0FBR3BFLElBQU1sRixXQUFXLEdBQUcsU0FBZEEsV0FBV0EsQ0FBQSxFQUFTO0VBQ3RCO0VBQ0E7O0VBRUEsSUFBSXFGLEtBQUssR0FBRyxFQUFFO0VBQ2RGLGVBQWUsQ0FBQ3ZqQixPQUFPLENBQUUsVUFBQ1ksTUFBTSxFQUFFcUwsQ0FBQyxFQUFLO0lBQ3BDLElBQUk2VSxRQUFRLEdBQUcsa0JBQWtCLEdBQUc3VSxDQUFDO0lBQ3JDLElBQUl5WCxjQUFjLEdBQUcsb0JBQW9CLEdBQUd6WCxDQUFDO0lBRTdDckwsTUFBTSxDQUFDZ2EsWUFBWSxDQUFDLElBQUksRUFBRWtHLFFBQVEsQ0FBQztJQUNuQzBDLHFCQUFxQixDQUFDdlgsQ0FBQyxDQUFDLENBQUMyTyxZQUFZLENBQUMsSUFBSSxFQUFFOEksY0FBYyxDQUFDO0lBRTNERCxLQUFLLENBQUN4WCxDQUFDLENBQUMsR0FBRyxJQUFJbVgscUVBQWUsQ0FBQ3RDLFFBQVEsQ0FBQztFQUM1QyxDQUFDLENBQUM7QUFDTixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDNUJEO0FBQ0E7QUFDQTtBQUM2RTtBQUNKO0FBQ1U7QUFDRjs7QUFFakY7QUFDQSxJQUFNNkMsVUFBVSxHQUFHLGtCQUFrQjtBQUNyQyxJQUFNQyxlQUFlLEdBQUcsbUJBQW1COztBQUUzQztBQUNBLElBQU1DLGdCQUFnQixHQUFHcGtCLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUM2akIsZUFBZSxDQUFDO0FBRW5FLElBQU12RixhQUFhLEdBQUcsU0FBQUEsY0FBQSxFQUFNO0VBQ3hCOztFQUVBLElBQU15RixtQkFBbUIsR0FBRyxFQUFFO0VBQzlCLElBQU16RixhQUFhLEdBQUcsRUFBRTtFQUN4QixJQUFJMEYsWUFBWSxHQUFHaGlCLE1BQU0sQ0FBQ3VhLFVBQVU7RUFFcEN1SCxnQkFBZ0IsQ0FBQzdqQixPQUFPLENBQUMsVUFBQ1ksTUFBTSxFQUFFcUwsQ0FBQyxFQUFLO0lBQ3BDNlgsbUJBQW1CLENBQUM3WCxDQUFDLENBQUMsR0FBRztNQUNyQnNVLFVBQVUsRUFBRTtRQUNSamhCLEVBQUUsRUFBRSx1QkFBdUI7UUFDM0JraEIsU0FBUyxFQUFFO01BQ2Y7SUFDSixDQUFDO0lBQ0QsSUFBTU0sUUFBUSxNQUFBdGdCLE1BQUEsQ0FBTW1qQixVQUFVLE9BQUFuakIsTUFBQSxDQUFJeUwsQ0FBQyxDQUFFO0lBQ3JDckwsTUFBTSxDQUFDZ2EsWUFBWSxDQUFDLElBQUksRUFBRWtHLFFBQVEsQ0FBQztJQUVuQ2dELG1CQUFtQixDQUFDN1gsQ0FBQyxDQUFDLEdBQUdnVCxzRkFBWSxDQUFDcmUsTUFBTSxFQUFFa2pCLG1CQUFtQixDQUFDN1gsQ0FBQyxDQUFDLENBQUM7SUFDckU2WCxtQkFBbUIsQ0FBQzdYLENBQUMsQ0FBQyxHQUFHaVQsa0ZBQVksQ0FBQ3RlLE1BQU0sRUFBRWtqQixtQkFBbUIsQ0FBQzdYLENBQUMsQ0FBQyxDQUFDO0lBQ3JFNlgsbUJBQW1CLENBQUM3WCxDQUFDLENBQUMsR0FBR2tULDRGQUFlLENBQUN2ZSxNQUFNLEVBQUVrakIsbUJBQW1CLENBQUM3WCxDQUFDLENBQUMsQ0FBQzs7SUFFeEU7SUFDQTZYLG1CQUFtQixDQUFDN1gsQ0FBQyxDQUFDLEdBQUdtVCwwRkFBYyxDQUFDeGUsTUFBTSxFQUFFa2pCLG1CQUFtQixDQUFDN1gsQ0FBQyxDQUFDLEVBQUUwWCxVQUFVLEVBQUUxWCxDQUFDLENBQUM7SUFFdEYsSUFBSStYLFFBQVEsR0FBR3BqQixNQUFNLENBQUNzUCxZQUFZLENBQUMsZ0JBQWdCLENBQUM7SUFFcERtTyxhQUFhLENBQUNwUyxDQUFDLENBQUMsR0FBRyxJQUFJd0osTUFBTSxDQUFDN1UsTUFBTSxFQUFFa2pCLG1CQUFtQixDQUFDN1gsQ0FBQyxDQUFDLENBQUM7SUFFN0QsSUFBSStYLFFBQVEsRUFBRTtNQUNWRCxZQUFZLEdBQUcsR0FBRyxHQUFHMUYsYUFBYSxDQUFDcFMsQ0FBQyxDQUFDLENBQUNnWSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUU7SUFDeEQ7RUFDSixDQUFDLENBQUM7QUFDTixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUMvQ0Q7QUFDQTtBQUNBOztBQUVBLElBQU16RixPQUFPLEdBQUcsU0FBVkEsT0FBT0EsQ0FBQSxFQUFTO0VBRWxCLElBQU0wRixTQUFTLEdBQUd6a0IsUUFBUSxDQUFDQyxhQUFhLENBQUMscUJBQXFCLENBQUM7RUFFL0QsSUFBR3drQixTQUFTLEVBQUU7SUFFVixJQUFJQyxjQUFjLEdBQUcxa0IsUUFBUSxDQUFDTSxnQkFBZ0IsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDakIsTUFBTTtJQUV2RyxJQUFNc2xCLFNBQVMsR0FBRyxJQUFJM08sTUFBTSxDQUFDLGNBQWMsRUFBRTtNQUN6Q0csWUFBWSxFQUFFLENBQUM7TUFDZnlPLE1BQU0sRUFBRSxPQUFPO01BQ2YzSyxTQUFTLEVBQUUsVUFBVTtNQUNyQjBHLGNBQWMsRUFBRSxJQUFJO01BQ3BCa0UsWUFBWSxFQUFFLENBQUM7TUFDZnpGLFdBQVcsRUFBRTtRQUNULEdBQUcsRUFBRTtVQUNEbkosYUFBYSxFQUFFO1FBQ25CLENBQUM7UUFDRCxJQUFJLEVBQUU7VUFDRkEsYUFBYSxFQUFFO1FBQ25CLENBQUM7UUFDRCxJQUFJLEVBQUU7VUFDRkEsYUFBYSxFQUFFO1FBQ25CO01BQ0osQ0FBQztNQUNEO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQU0sS0FBSyxFQUFFLElBQUk7TUFDWEwsSUFBSSxFQUFFLElBQUk7TUFDVjRPLFlBQVksRUFBRUosY0FBYztNQUM1Qkssb0JBQW9CLEVBQUUsQ0FBQztNQUN2QjFGLG1CQUFtQixFQUFFO0lBQ3pCLENBQUMsQ0FBQztJQUVGLElBQU0yRixZQUFZLEdBQUcsSUFBSWhQLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRTtNQUMvQzZPLFlBQVksRUFBRSxDQUFDO01BQ2ZsRSxjQUFjLEVBQUUsSUFBSTtNQUNwQjFHLFNBQVMsRUFBRSxVQUFVO01BQ3JCL0QsSUFBSSxFQUFFLElBQUk7TUFDVjRPLFlBQVksRUFBRUosY0FBYztNQUM1Qkssb0JBQW9CLEVBQUUsQ0FBQztNQUN2QnZDLFVBQVUsRUFBRTtRQUNSQyxNQUFNLEVBQUUscUJBQXFCO1FBQzdCQyxNQUFNLEVBQUU7TUFDWjtJQUNKLENBQUMsQ0FBQztJQUVGaUMsU0FBUyxDQUFDTSxVQUFVLENBQUNDLE9BQU8sR0FBR0YsWUFBWTtJQUMzQ0EsWUFBWSxDQUFDQyxVQUFVLENBQUNDLE9BQU8sR0FBR1AsU0FBUzs7SUFFbkQ7SUFDQTtJQUNBOztJQUVBO0lBQ0E7SUFDQTtFQUdJO0FBRUosQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQ3BFMkY7QUFFNUYsSUFBTVMsUUFBUSxHQUFHLFlBQVk7QUFDN0IsSUFBTUMsY0FBYyxHQUFHLHlCQUF5QjtBQUNoRCxJQUFNQyxXQUFXLEdBQUd0bEIsUUFBUSxDQUFDTSxnQkFBZ0IsQ0FBQytrQixjQUFjLENBQUM7QUFFN0QsSUFBTUUsdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FBQSxFQUFTO0VBRWxDRCxXQUFXLENBQUMva0IsT0FBTyxDQUFFLFVBQUNvZCxHQUFHLEVBQUVuUixDQUFDLEVBQUs7SUFDN0IsSUFBSWdaLElBQUksTUFBQXprQixNQUFBLENBQU1xa0IsUUFBUSxPQUFBcmtCLE1BQUEsQ0FBSXlMLENBQUMsQ0FBRTtJQUM3QixJQUFJcVIsTUFBTSxPQUFBOWMsTUFBQSxDQUFPeWtCLElBQUksQ0FBRTtJQUN2QjdILEdBQUcsQ0FBQ3hDLFlBQVksQ0FBQyxJQUFJLEVBQUVxSyxJQUFJLENBQUM7SUFFNUIsSUFBSUwsMEZBQXdCLENBQUN0SCxNQUFNLENBQUM7RUFDeEMsQ0FBQyxDQUFDO0FBQ04sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQ2ZEO0FBQ0E7QUFDZSxTQUFTNEgsUUFBUUEsQ0FBQSxFQUFHO0VBQy9CLElBQU1DLGdCQUFnQixHQUFHMWxCLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUMsb0JBQW9CLENBQUM7RUFDeEU7RUFDQW9sQixnQkFBZ0IsQ0FBQ25sQixPQUFPLENBQUMsVUFBQ29sQixlQUFlLEVBQUs7SUFDNUMsSUFBTUMsV0FBVyxHQUFHRCxlQUFlLENBQUMxbEIsYUFBYSxDQUFDLHNCQUFzQixDQUFDO0lBQ3pFLElBQU00bEIsZ0JBQWdCLEdBQUdGLGVBQWUsQ0FBQzFsQixhQUFhLENBQUMsNEJBQTRCLENBQUM7SUFDcEY7SUFDQTtJQUNBLElBQU02bEIsWUFBWSxHQUFHSCxlQUFlLENBQUMxbEIsYUFBYSxDQUFDLGlCQUFpQixDQUFDO0lBQ3JFLElBQU04bEIsUUFBUSxHQUFHSixlQUFlLENBQUN2a0IsU0FBUyxDQUFDQyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBQ2hFLElBQU0ya0Isa0JBQWtCLEdBQUlGLFlBQVksR0FBSUEsWUFBWSxDQUFDcE8sWUFBWSxHQUFHLENBQUM7SUFFekUsSUFBSWlPLGVBQWUsQ0FBQ3ZrQixTQUFTLENBQUNDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBQztNQUNoRHlrQixZQUFZLENBQUNqbEIsS0FBSyxDQUFDQyxTQUFTLE1BQUFDLE1BQUEsQ0FBTWlsQixrQkFBa0IsT0FBSTtJQUM1RDtJQUVBLFNBQVNDLFFBQVFBLENBQUEsRUFBRztNQUNoQixJQUFHSCxZQUFZLEVBQUU7UUFDZjFtQixDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQzRDLFdBQVcsQ0FBQyxXQUFXLENBQUM7UUFDaEQ1QyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQzJDLEdBQUcsQ0FBQztVQUFDLFdBQVcsRUFBQztRQUFHLENBQUMsQ0FBQztRQUMzQzRqQixlQUFlLENBQUN2a0IsU0FBUyxDQUFDTSxHQUFHLENBQUMsV0FBVyxDQUFDO1FBQzFDO1FBQ0Fva0IsWUFBWSxDQUFDamxCLEtBQUssQ0FBQ0MsU0FBUyxNQUFBQyxNQUFBLENBQU1pbEIsa0JBQWtCLE9BQUk7TUFDMUQ7SUFDSjtJQUVBLFNBQVNFLFFBQVFBLENBQUEsRUFBRztNQUNoQixJQUFHSixZQUFZLEVBQUU7UUFDZkgsZUFBZSxDQUFDdmtCLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUM3QztRQUNBd2tCLFlBQVksQ0FBQ2psQixLQUFLLENBQUNDLFNBQVMsR0FBRyxDQUFDO01BQ2xDO0lBQ0o7SUFFQSxTQUFTaVAsTUFBTUEsQ0FBQSxFQUFHO01BQ2hCLElBQUk0VixlQUFlLENBQUN2a0IsU0FBUyxDQUFDQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUM7UUFDaER5a0IsWUFBWSxDQUFDamxCLEtBQUssQ0FBQ0MsU0FBUyxHQUFHLENBQUM7UUFDaEM2a0IsZUFBZSxDQUFDdmtCLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDLFdBQVcsQ0FBQztNQUNqRCxDQUFDLE1BQUk7UUFDSHFrQixlQUFlLENBQUN2a0IsU0FBUyxDQUFDTSxHQUFHLENBQUMsV0FBVyxDQUFDO1FBQzFDb2tCLFlBQVksQ0FBQ2psQixLQUFLLENBQUNDLFNBQVMsTUFBQUMsTUFBQSxDQUFNaWxCLGtCQUFrQixPQUFJO01BQzFEO0lBQ0Y7SUFDQSxJQUFJSixXQUFXLEVBQUU7TUFDZkEsV0FBVyxDQUFDNWtCLGdCQUFnQixDQUFDLFlBQVksRUFBRWlsQixRQUFRLENBQUM7SUFDdEQsQ0FBQyxNQUFJO01BQ0hKLGdCQUFnQixDQUFDN2tCLGdCQUFnQixDQUFDLE9BQU8sRUFBRStPLE1BQU0sQ0FBQztJQUNwRDs7SUFFQTtFQUNGLENBQUMsQ0FBQzs7RUFFRjs7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7RUFFQTtFQUNBO0FBQ0Y7QUFBQzs7Ozs7Ozs7Ozs7Ozs7QUNsRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRU8sU0FBU29XLFNBQVNBLENBQUN0bUIsRUFBRSxFQUFFdW1CLEtBQUssRUFBRTtFQUNqQyxJQUFNQyxJQUFJLEdBQUdybUIsUUFBUSxDQUFDTSxnQkFBZ0IsQ0FBQ1QsRUFBRSxDQUFDO0VBQzFDLElBQU0yVCxJQUFJLEdBQUd4VCxRQUFRLENBQUNDLGFBQWEsQ0FBQyxNQUFNLENBQUM7RUFDM0MsSUFBTXFtQixRQUFRLEdBQUd0bUIsUUFBUSxDQUFDTSxnQkFBZ0IsQ0FBQywwQkFBMEIsQ0FBQztFQUN0RSxJQUFJaW1CLFFBQVEsR0FBR2prQixNQUFNLENBQUN1YSxVQUFVO0VBQ2hDO0VBQ0F3SixJQUFJLENBQUM5bEIsT0FBTyxDQUFDLFVBQUFSLEdBQUcsRUFBSTtJQUNoQkEsR0FBRyxDQUFDaUIsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFVBQUFDLEtBQUssRUFBSTtNQUVuQ0EsS0FBSyxDQUFDQyxjQUFjLENBQUMsQ0FBQztNQUV0QixJQUFJcWxCLFFBQVEsR0FBRyxJQUFJLEVBQUU7UUFDakJELFFBQVEsQ0FBQy9sQixPQUFPLENBQUMsVUFBQWltQixPQUFPLEVBQUk7VUFDeEJBLE9BQU8sQ0FBQ3ZtQixhQUFhLENBQUMsV0FBVyxDQUFDLENBQUNZLEtBQUssQ0FBQzRsQixPQUFPLEdBQUcsT0FBTztRQUM5RCxDQUFDLENBQUM7TUFDTjtNQUVBLElBQUkxbUIsR0FBRyxDQUFDMFEsWUFBWSxDQUFDLGVBQWUsQ0FBQyxLQUFLLE9BQU8sRUFBRTtRQUMvQzFRLEdBQUcsQ0FBQ3FCLFNBQVMsQ0FBQ00sR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUM5QjhSLElBQUksQ0FBQ3BTLFNBQVMsQ0FBQ00sR0FBRyxDQUFDLFlBQVksQ0FBQztRQUNoQzNCLEdBQUcsQ0FBQ29iLFlBQVksQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDO1FBQ3pDdUwsVUFBVSxDQUFDLGdCQUFnQixDQUFDO1FBQzVCQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3BCQyxZQUFZLENBQUMsQ0FBQztNQUNsQixDQUFDLE1BQU07UUFDSDdtQixHQUFHLENBQUNxQixTQUFTLENBQUNFLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDakNrUyxJQUFJLENBQUNwUyxTQUFTLENBQUNFLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDbkN2QixHQUFHLENBQUNvYixZQUFZLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQztRQUMxQ3VMLFVBQVUsQ0FBQyxlQUFlLENBQUM7TUFDL0I7SUFDSixDQUFDLENBQUM7RUFDTixDQUFDLENBQUM7O0VBR0Y7O0VBRUEsSUFBTTlQLFNBQVMsR0FBRzVXLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUMsMEJBQTBCLENBQUM7RUFFdkVzVyxTQUFTLENBQUNyVyxPQUFPLENBQUMsVUFBQUMsSUFBSSxFQUFJO0lBQ3RCQSxJQUFJLENBQUNRLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxZQUFNO01BQ2pDO01BQ0E0VixTQUFTLENBQUNyVyxPQUFPLENBQUMsVUFBQXNtQixTQUFTLEVBQUk7UUFDM0IsSUFBSUEsU0FBUyxLQUFLcm1CLElBQUksRUFBRTtVQUNwQixJQUFNc21CLFNBQVMsR0FBR0QsU0FBUyxDQUFDNW1CLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQztVQUNyRSxJQUFJNm1CLFNBQVMsRUFBRTtZQUNYQSxTQUFTLENBQUNqbUIsS0FBSyxDQUFDRixNQUFNLEdBQUcsR0FBRztZQUM1Qm1tQixTQUFTLENBQUMxbEIsU0FBUyxDQUFDRSxNQUFNLENBQUMsWUFBWSxDQUFDO1lBQ3hDdWxCLFNBQVMsQ0FBQ3psQixTQUFTLENBQUNFLE1BQU0sQ0FBQyxZQUFZLENBQUM7VUFDNUM7UUFDSjtNQUNKLENBQUMsQ0FBQzs7TUFFRjtNQUNBLElBQU15bEIsSUFBSSxHQUFHdm1CLElBQUksQ0FBQ1AsYUFBYSxDQUFDLDBCQUEwQixDQUFDO01BQzNELElBQUk4bUIsSUFBSSxFQUFFO1FBQ04sSUFBTVAsT0FBTyxHQUFHTyxJQUFJLENBQUM5bUIsYUFBYSxDQUFDLFdBQVcsQ0FBQztRQUMvQyxJQUFNVSxNQUFNLEdBQUc2bEIsT0FBTyxHQUFHQSxPQUFPLENBQUM1bEIsWUFBWSxHQUFHLENBQUM7O1FBRWpEO1FBQ0EsSUFBTW1sQixRQUFRLEdBQUdnQixJQUFJLENBQUMzbEIsU0FBUyxDQUFDQyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3REMGxCLElBQUksQ0FBQ2xtQixLQUFLLENBQUNGLE1BQU0sR0FBR29sQixRQUFRLEdBQUcsR0FBRyxNQUFBaGxCLE1BQUEsQ0FBTUosTUFBTSxPQUFJO1FBQ2xEb21CLElBQUksQ0FBQzNsQixTQUFTLENBQUMyTyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQ25DdlAsSUFBSSxDQUFDWSxTQUFTLENBQUMyTyxNQUFNLENBQUMsWUFBWSxDQUFDO01BQ3ZDO0lBQ0osQ0FBQyxDQUFDO0VBQ04sQ0FBQyxDQUFDO0FBRU47QUFHQSxTQUFTMlcsVUFBVUEsQ0FBQzVVLFFBQVEsRUFBRTtFQUMxQixJQUFNc0YsT0FBTyxHQUFHcFgsUUFBUSxDQUFDQyxhQUFhLENBQUM2UixRQUFRLENBQUM7RUFFaEQsSUFBSXNGLE9BQU8sRUFBRTtJQUNUQSxPQUFPLENBQUNpRSxLQUFLLENBQUMsQ0FBQztFQUNuQjtBQUNKO0FBRUEsU0FBU3NMLGtCQUFrQkEsQ0FBQSxFQUFHO0VBQzFCM21CLFFBQVEsQ0FBQ2dCLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxVQUFVMEMsQ0FBQyxFQUFFO0lBQzlDLElBQUlzakIsaUJBQWlCLEdBQUdobkIsUUFBUSxDQUFDTSxnQkFBZ0IsQ0FBQyxxS0FBcUssQ0FBQztJQUN4TjBtQixpQkFBaUIsR0FBR0MsS0FBSyxDQUFDQyxTQUFTLENBQUNDLEtBQUssQ0FBQ0MsSUFBSSxDQUFDSixpQkFBaUIsQ0FBQztJQUVqRSxJQUFJSyxZQUFZLEdBQUdMLGlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUN2QyxJQUFJTSxXQUFXLEdBQUdOLGlCQUFpQixDQUFDQSxpQkFBaUIsQ0FBQzNuQixNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRWpFLElBQUlxRSxDQUFDLENBQUNQLEdBQUcsS0FBSyxLQUFLLEVBQUU7TUFDakIsSUFBSU8sQ0FBQyxDQUFDNmpCLFFBQVEsRUFBRSxpQkFBa0I7VUFDOUIsSUFBSXZuQixRQUFRLENBQUN3bkIsYUFBYSxLQUFLSCxZQUFZLEVBQUU7WUFDekMzakIsQ0FBQyxDQUFDeEMsY0FBYyxDQUFDLENBQUM7WUFDbEJvbUIsV0FBVyxDQUFDak0sS0FBSyxDQUFDLENBQUM7VUFDdkI7UUFDSixDQUFDLE1BQU0sU0FBVTtVQUNiLElBQUlyYixRQUFRLENBQUN3bkIsYUFBYSxLQUFLRixXQUFXLEVBQUU7WUFDeEM1akIsQ0FBQyxDQUFDeEMsY0FBYyxDQUFDLENBQUM7WUFDbEJtbUIsWUFBWSxDQUFDaE0sS0FBSyxDQUFDLENBQUM7VUFDeEI7UUFDSjtJQUNKO0VBQ0osQ0FBQyxDQUFDO0FBQ047QUFFQSxTQUFTdUwsWUFBWUEsQ0FBQSxFQUFHO0VBQ3BCNW1CLFFBQVEsQ0FBQ2dCLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxVQUFVQyxLQUFLLEVBQUU7SUFDbEQsSUFBSUEsS0FBSyxDQUFDa0MsR0FBRyxLQUFLLFFBQVEsSUFBSWxDLEtBQUssQ0FBQ2tDLEdBQUcsS0FBSyxLQUFLLEVBQUU7TUFDL0MsSUFBTXFRLElBQUksR0FBR3hULFFBQVEsQ0FBQ3dULElBQUk7TUFDMUIsSUFBSUEsSUFBSSxDQUFDcFMsU0FBUyxDQUFDQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUU7UUFDdkNtUyxJQUFJLENBQUNwUyxTQUFTLENBQUNFLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDbkN0QixRQUFRLENBQUNDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQ21CLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUNyRXRCLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDa2IsWUFBWSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUM7UUFDOUV1TCxVQUFVLENBQUMsZUFBZSxDQUFDO01BQy9CO0lBQ0o7RUFDSixDQUFDLENBQUM7QUFDTjs7Ozs7Ozs7Ozs7Ozs7O0FDdkg2Qzs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTyxTQUFTZ0IsWUFBWUEsQ0FBQzduQixFQUFFLEVBQUU4bkIsT0FBTyxFQUFFO0VBRXRDLElBQU1DLFFBQVEsR0FBRzVuQixRQUFRLENBQUNDLGFBQWEsQ0FBQ0osRUFBRSxDQUFDO0VBQzNDLElBQU1nb0IsUUFBUSxHQUFHLEVBQUU7RUFDbkIsSUFBTXZjLE1BQU0sR0FBR3hHLFFBQVEsQ0FBQytpQixRQUFRLEdBQUcsQ0FBQyxDQUFDO0VBR3JDLElBQU1DLFFBQVEsR0FBRyxTQUFYQSxRQUFRQSxDQUFBLEVBQVM7SUFDbkIsSUFBSXhsQixNQUFNLENBQUN5bEIsV0FBVyxHQUFJRixRQUFRLEdBQUd2YyxNQUFPLEVBQUU7TUFDMUNzYyxRQUFRLENBQUN4bUIsU0FBUyxDQUFDTSxHQUFHLENBQUNpbUIsT0FBTyxDQUFDO0lBQ25DLENBQUMsTUFBTSxJQUFJcmxCLE1BQU0sQ0FBQ3lsQixXQUFXLEdBQUlGLFFBQVEsR0FBR3ZjLE1BQU8sRUFBRTtNQUNqRHNjLFFBQVEsQ0FBQ3htQixTQUFTLENBQUNFLE1BQU0sQ0FBQ3FtQixPQUFPLENBQUM7SUFDdEM7RUFDSixDQUFDO0VBRUQsSUFBTUssY0FBYyxHQUFHUCx5REFBVyxDQUFDLFlBQU07SUFDckNLLFFBQVEsQ0FBQyxDQUFDO0VBQ2QsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVOeGxCLE1BQU0sQ0FBQ3RCLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxZQUFNO0lBQ3BDZ25CLGNBQWMsQ0FBQyxDQUFDO0VBQ3BCLENBQUMsQ0FBQztFQUVGLElBQUkxbEIsTUFBTSxDQUFDeWxCLFdBQVcsR0FBSUYsUUFBUSxHQUFHdmMsTUFBTyxFQUFFO0lBQzFDc2MsUUFBUSxDQUFDeG1CLFNBQVMsQ0FBQ00sR0FBRyxDQUFDaW1CLE9BQU8sQ0FBQztFQUNuQztBQUVKOzs7Ozs7Ozs7Ozs7Ozs7QUNuQ2dFO0FBRWhFLElBQU1RLGFBQWEsR0FBRyxTQUFoQkEsYUFBYUEsQ0FBQSxFQUFTO0VBRXhCLElBQUlyVyxRQUFRLEdBQUc5UixRQUFRLENBQUNDLGFBQWEsQ0FBQyxhQUFhLENBQUM7RUFFcEQsSUFBSXdqQixLQUFLO0VBQ1QsSUFBSTNSLFFBQVEsRUFBRTtJQUNWMlIsS0FBSyxHQUFHM1IsUUFBUSxDQUFDeFIsZ0JBQWdCLENBQUMscUNBQXFDLENBQUM7RUFDNUU7RUFFQSxJQUFHbWpCLEtBQUssRUFBRTtJQUVOQSxLQUFLLENBQUNsakIsT0FBTyxDQUFDLFVBQUNSLEdBQUcsRUFBRXlNLENBQUMsRUFBSztNQUV0QixJQUFJNGIsT0FBTyxHQUFHcm9CLEdBQUcsQ0FBQ0UsYUFBYSxDQUFDLFdBQVcsQ0FBQztNQUM1Q0YsR0FBRyxDQUFDb2IsWUFBWSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUM7TUFDMUMrTSxpRUFBUyxDQUFDRSxPQUFPLENBQUM7TUFHbEJyb0IsR0FBRyxDQUFDc29CLGlCQUFpQixDQUFDcm5CLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxVQUFDc25CLEVBQUUsRUFBSztRQUNwREEsRUFBRSxDQUFDcG5CLGNBQWMsQ0FBQyxDQUFDO1FBQ25CLElBQUdvbkIsRUFBRSxDQUFDamlCLE1BQU0sQ0FBQ21LLE9BQU8sQ0FBQzdJLFdBQVcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO1VBQ3hDO1FBQUE7UUFHSixJQUFHNUgsR0FBRyxDQUFDcUIsU0FBUyxDQUFDQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUU7VUFDckM2bUIsaUVBQVMsQ0FBQ0UsT0FBTyxDQUFDO1VBQ2xCcm9CLEdBQUcsQ0FBQ3FCLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDLFlBQVksQ0FBQztVQUNsQ3ZCLEdBQUcsQ0FBQ29iLFlBQVksQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDO1FBQzlDLENBQUMsTUFDSTtVQUNEc0ksS0FBSyxDQUFDbGpCLE9BQU8sQ0FBRSxVQUFDQyxJQUFJLEVBQUcrbkIsQ0FBQyxFQUFLO1lBQ3pCLElBQUlILE9BQU8sR0FBRzVuQixJQUFJLENBQUNQLGFBQWEsQ0FBQyxXQUFXLENBQUM7WUFDN0MsSUFBR08sSUFBSSxDQUFDWSxTQUFTLENBQUNDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRTtjQUN0QzZtQixpRUFBUyxDQUFDRSxPQUFPLENBQUM7Y0FDbEI1bkIsSUFBSSxDQUFDWSxTQUFTLENBQUNFLE1BQU0sQ0FBQyxZQUFZLENBQUM7Y0FDbkNkLElBQUksQ0FBQzJhLFlBQVksQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDO1lBQy9DO1VBQ0osQ0FBQyxDQUFDO1VBQ0ZwYixHQUFHLENBQUNxQixTQUFTLENBQUNNLEdBQUcsQ0FBQyxZQUFZLENBQUM7VUFDL0IzQixHQUFHLENBQUNvYixZQUFZLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQztVQUN6QzhNLG1FQUFXLENBQUNHLE9BQU8sQ0FBQztRQUN4QjtNQUNKLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztFQUNOO0FBQ0osQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQy9DRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDc0Q7QUFDdEQ7QUFDZ0Q7QUFDUTs7QUFFeEQ7QUFDdUQ7QUFDTTtBQUN1Qjs7QUFFcEY7QUFDa0Q7QUFDbUI7QUFDckU7QUFDQTtBQUMrQztBQUNxQjtBQUNEO0FBQ1A7QUFDSjtBQUNBO0FBQ3hEO0FBQ3FEO0FBQ1M7QUFDRjtBQUNBO0FBQ0g7QUFDRDtBQUNBO0FBQ0E7QUFDeEQ7QUFDa0Q7QUFDa0I7QUFDdEI7QUFDYztBQUM1RDtBQUN1RDtBQUNDO0FBQ1M7QUFDTjtBQUNlO0FBQ2hCO0FBR0o7QUFFTztBQUVNO0FBRVI7QUFFUjs7QUFFbkQ7QUFDQTtBQUNBOztBQUVBO0FBQzZEOztBQUU3RDtBQUNtRTtBQUVSO0FBQ007QUFDVTtBQUNNO0FBRVY7QUFFZDtBQUNHOztBQUU1RDtBQUNtRTs7QUFFbkU7QUFDK0Q7QUFDWjs7QUFFbkQ7QUFDTyxTQUFTZ0IsSUFBSUEsQ0FBQSxFQUFHO0VBQ3JCLE9BQU9DLE1BQU07QUFDZjtBQUVBcnBCLFFBQVEsQ0FBQ2dCLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLFlBQU07RUFDbEQ7RUFDQXluQiwyRUFBZ0IsQ0FBQyxDQUFDOztFQUVsQjtFQUNBM0ssaUZBQWMsQ0FBQyxDQUFDOztFQUVoQjtFQUNBNEosbUVBQVksQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDO0VBQ3pDO0VBQ0F2Qiw2REFBUyxDQUFDLGVBQWUsRUFBRSwwQkFBMEIsQ0FBQztFQUN0RCxJQUFJN2pCLE1BQU0sQ0FBQ2duQixVQUFVLENBQUMscUJBQXFCLENBQUMsQ0FBQ0MsT0FBTyxFQUFFO0lBQ3BEcEIscUVBQWEsQ0FBQyxDQUFDO0VBQ2pCO0VBRUEsSUFBSWEsc0VBQVcsQ0FBQztJQUNkbFgsUUFBUSxFQUFFO0VBQ1osQ0FBQyxDQUFDO0VBRUYsSUFBSTRXLCtFQUFZLENBQUMsQ0FBQztFQUVsQk8sNkVBQVcsQ0FBQyxDQUFDO0VBRWIsSUFBSUYsOEVBQWlCLENBQUMsQ0FBQztFQUV2Qi9KLG9FQUFXLENBQUMsQ0FBQztFQUNiNUIsMEVBQWMsQ0FBQyxDQUFDO0VBQ2hCOztFQUVBb0wsMEVBQWEsQ0FBQyxDQUFDOztFQUVmO0VBQ0EzVyxtRUFBVSxDQUFDLGNBQWMsQ0FBQztFQUMxQjtFQUNBO0VBQ0FnRyxpRUFBUyxDQUFDLENBQUM7RUFDWDROLHVGQUFRLENBQUMsQ0FBQztFQUNWNVIsaUZBQWdCLENBQUN3VixNQUFNLENBQUM7RUFDeEI1ZSxxRUFBZSxDQUFDNGUsTUFBTSxDQUFDO0VBQ3ZCMU8sc0VBQVksQ0FBQyxrQkFBa0IsQ0FBQztFQUNoQztFQUNBdlksbUVBQVMsQ0FBQyxXQUFXLENBQUM7RUFDdEJpViw0RUFBaUIsQ0FBQyxDQUFDO0VBQ25CNEYsMEVBQWEsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQztFQUNyRE4sMEVBQWEsQ0FBQyxDQUFDO0VBQ2Y5UCx3RUFBYSxDQUFDLENBQUM7RUFDZmpOLHNFQUFXLENBQUMsZUFBZSxFQUFFLGlCQUFpQixDQUFDO0VBQy9DeU8sc0VBQVcsQ0FBQyxDQUFDO0VBQ2I7RUFDQWxQLGdFQUFRLENBQUMsQ0FBQztFQUNWZ1csa0ZBQWlCLENBQUMsQ0FBQztFQUVuQmpFLDREQUFNLENBQUMsQ0FBQztFQUNSTCwwRUFBYSxDQUFDLENBQUM7RUFDZjs7RUFFQVYsc0VBQWMsQ0FBQyxDQUFDO0VBQ2hCb0UsNEVBQWlCLENBQUMsQ0FBQztFQUNuQnBHLGtFQUFxQixDQUFDLENBQUM7RUFFdkJ4TSxxRUFBYSxDQUFDLENBQUM7RUFFZjhDLHdGQUFxQixDQUFDLENBQUM7RUFDdkJNLHdFQUFlLENBQUMsQ0FBQztFQUVqQnVXLDJFQUFXLENBQUMsQ0FBQztFQUVicEUsaUZBQW1CLENBQUMsQ0FBQztFQUVyQlAseUVBQVMsQ0FBQyxDQUFDO0VBRVgsSUFBSXZYLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQ0ssUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO0lBQzlCO0VBQUE7RUFHRmlXLG9FQUFVLENBQUMsQ0FBQztFQUVaLElBQUlpVCw0RUFBTyxDQUFDLENBQUM7RUFDYixJQUFJQyw4RUFBVyxDQUFDLENBQUM7RUFDakIsSUFBSUMsbUZBQWdCLENBQUMsQ0FBQztFQUN0QixJQUFJQyxzRkFBbUIsQ0FBQyxDQUFDO0VBRXpCdkQsaUdBQXVCLENBQUMsQ0FBQztFQUN6QjJELDZFQUFnQixDQUFDLENBQUM7RUFHbEIxUSxpRUFBVSxDQUFDLENBQUM7O0VBTVo7RUFDQSxJQUFJN1YseUVBQW1CLENBQUMsQ0FBQztFQUd6QixJQUFJTCxNQUFNLENBQUNnbkIsVUFBVSxDQUFDLHFCQUFxQixDQUFDLENBQUNDLE9BQU8sRUFBRTtJQUVwREosaUVBQVUsQ0FBQyxDQUFDO0lBQ1pwWSxzRUFBVyxDQUFDLENBQUM7RUFDZjtBQUVGLENBQUMsQ0FBQztBQUNGM1IsQ0FBQyxDQUFDa0QsTUFBTSxDQUFDLENBQUMyRixFQUFFLENBQUMsUUFBUSxFQUFFLFlBQVk7RUFDakM0SSwwRUFBYSxDQUFDLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBQ0Y7O0FBRUEsSUFBTTJZLFVBQVUsR0FBRyxJQUFJQyxRQUFRLENBQUM7RUFDOUJDLGlCQUFpQixFQUFFO0FBQ3JCLENBQUMsQ0FBQztBQUVGcG5CLE1BQU0sQ0FBQ2tuQixVQUFVLEdBQUdBLFVBQVU7O0FBRTlCO0FBQ0F4aEIsTUFBTSxDQUFDL0csS0FBSyxDQUFDMG9CLE9BQU8sQ0FBQ0MsVUFBVSxHQUFHO0VBQ2hDQyxLQUFLLFdBQUFBLE1BQUNDLENBQUMsRUFBRUMsRUFBRSxFQUFFQyxNQUFNLEVBQUU7SUFDbkIsSUFBSSxDQUFDaHBCLGdCQUFnQixDQUFDLFlBQVksRUFBRWdwQixNQUFNLEVBQUU7TUFBRUMsT0FBTyxFQUFFLENBQUNGLEVBQUUsQ0FBQ2hnQixRQUFRLENBQUMsa0JBQWtCO0lBQUUsQ0FBQyxDQUFDO0VBQzVGO0FBQ0YsQ0FBQztBQUNEL0IsTUFBTSxDQUFDL0csS0FBSyxDQUFDMG9CLE9BQU8sQ0FBQ08sU0FBUyxHQUFHO0VBQy9CTCxLQUFLLFdBQUFBLE1BQUNDLENBQUMsRUFBRUMsRUFBRSxFQUFFQyxNQUFNLEVBQUU7SUFDbkIsSUFBSSxDQUFDaHBCLGdCQUFnQixDQUFDLFdBQVcsRUFBRWdwQixNQUFNLEVBQUU7TUFBRUMsT0FBTyxFQUFFLENBQUNGLEVBQUUsQ0FBQ2hnQixRQUFRLENBQUMsa0JBQWtCO0lBQUUsQ0FBQyxDQUFDO0VBQzNGO0FBQ0YsQ0FBQztBQUNEL0IsTUFBTSxDQUFDL0csS0FBSyxDQUFDMG9CLE9BQU8sQ0FBQ1EsS0FBSyxHQUFHO0VBQzNCTixLQUFLLFdBQUFBLE1BQUNDLENBQUMsRUFBRUMsRUFBRSxFQUFFQyxNQUFNLEVBQUU7SUFDbkIsSUFBSSxDQUFDaHBCLGdCQUFnQixDQUFDLE9BQU8sRUFBRWdwQixNQUFNLEVBQUU7TUFBRUMsT0FBTyxFQUFFO0lBQUssQ0FBQyxDQUFDO0VBQzNEO0FBQ0YsQ0FBQztBQUNEamlCLE1BQU0sQ0FBQy9HLEtBQUssQ0FBQzBvQixPQUFPLENBQUNTLFVBQVUsR0FBRztFQUNoQ1AsS0FBSyxXQUFBQSxNQUFDQyxDQUFDLEVBQUVDLEVBQUUsRUFBRUMsTUFBTSxFQUFFO0lBQ25CLElBQUksQ0FBQ2hwQixnQkFBZ0IsQ0FBQyxZQUFZLEVBQUVncEIsTUFBTSxFQUFFO01BQUVDLE9BQU8sRUFBRTtJQUFLLENBQUMsQ0FBQztFQUNoRTtBQUNGLENBQUM7O0FBRUQ7QUFDdUQ7QUFDdkRJLHFFQUFXLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzFPYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPLElBQU1DLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFJQyxDQUFDLEVBQUVDLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUs7RUFDdkMsT0FBTyxDQUFDRCxDQUFDLElBQUlGLENBQUMsSUFBSUcsQ0FBQyxDQUFDLElBQUlILENBQUMsR0FBRyxDQUFDLENBQUMsR0FBR0MsQ0FBQztBQUN0QyxDQUFDO0FBQ00sSUFBTUcsVUFBVSxHQUFHLFNBQWJBLFVBQVVBLENBQUlKLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBSztFQUN0QyxPQUFPRCxDQUFDLElBQUlGLENBQUMsSUFBSUcsQ0FBQyxDQUFDLEdBQUdILENBQUMsR0FBR0MsQ0FBQztBQUMvQixDQUFDO0FBQ00sSUFBTUksYUFBYSxHQUFHLFNBQWhCQSxhQUFhQSxDQUFJTCxDQUFDLEVBQUVDLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUs7RUFDekMsSUFBSSxDQUFDSCxDQUFDLElBQUlHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUNoQixPQUFPRCxDQUFDLEdBQUcsQ0FBQyxHQUFHRixDQUFDLEdBQUdBLENBQUMsR0FBR0MsQ0FBQztFQUM1QixPQUFPLENBQUNDLENBQUMsR0FBRyxDQUFDLElBQUssRUFBRUYsQ0FBQyxJQUFLQSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUdDLENBQUM7QUFDN0MsQ0FBQztBQUNNLElBQU1LLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFJTixDQUFDLEVBQUVDLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUs7RUFDdkMsT0FBT0QsQ0FBQyxJQUFJRixDQUFDLElBQUlHLENBQUMsQ0FBQyxHQUFHSCxDQUFDLEdBQUdBLENBQUMsR0FBR0MsQ0FBQztBQUNuQyxDQUFDO0FBQ00sSUFBTU0sWUFBWSxHQUFHLFNBQWZBLFlBQVlBLENBQUlQLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBSztFQUN4QyxPQUFPRCxDQUFDLElBQUksQ0FBQ0YsQ0FBQyxHQUFHQSxDQUFDLEdBQUdHLENBQUMsR0FBRyxDQUFDLElBQUlILENBQUMsR0FBR0EsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHQyxDQUFDO0FBQ2hELENBQUM7QUFDTSxJQUFNTyxjQUFjLEdBQUcsU0FBakJBLGNBQWNBLENBQUlSLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBSztFQUMxQyxJQUFJLENBQUNILENBQUMsSUFBSUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQ2hCLE9BQU9ELENBQUMsR0FBRyxDQUFDLEdBQUdGLENBQUMsR0FBR0EsQ0FBQyxHQUFHQSxDQUFDLEdBQUdDLENBQUM7RUFDaEMsT0FBT0MsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDRixDQUFDLElBQUksQ0FBQyxJQUFJQSxDQUFDLEdBQUdBLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBR0MsQ0FBQztBQUM3QyxDQUFDO0FBQ00sSUFBTVEsV0FBVyxHQUFHLFNBQWRBLFdBQVdBLENBQUlULENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBSztFQUN2QyxPQUFPRCxDQUFDLElBQUlGLENBQUMsSUFBSUcsQ0FBQyxDQUFDLEdBQUdILENBQUMsR0FBR0EsQ0FBQyxHQUFHQSxDQUFDLEdBQUdDLENBQUM7QUFDdkMsQ0FBQztBQUNNLElBQU1TLFlBQVksR0FBRyxTQUFmQSxZQUFZQSxDQUFJVixDQUFDLEVBQUVDLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUs7RUFDeEMsT0FBTyxDQUFDRCxDQUFDLElBQUksQ0FBQ0YsQ0FBQyxHQUFHQSxDQUFDLEdBQUdHLENBQUMsR0FBRyxDQUFDLElBQUlILENBQUMsR0FBR0EsQ0FBQyxHQUFHQSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUdDLENBQUM7QUFDckQsQ0FBQztBQUNNLElBQU1VLGNBQWMsR0FBRyxTQUFqQkEsY0FBY0EsQ0FBSVgsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBRUMsQ0FBQyxFQUFLO0VBQzFDLElBQUksQ0FBQ0gsQ0FBQyxJQUFJRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFDaEIsT0FBT0QsQ0FBQyxHQUFHLENBQUMsR0FBR0YsQ0FBQyxHQUFHQSxDQUFDLEdBQUdBLENBQUMsR0FBR0EsQ0FBQyxHQUFHQyxDQUFDO0VBQ3BDLE9BQU8sQ0FBQ0MsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDRixDQUFDLElBQUksQ0FBQyxJQUFJQSxDQUFDLEdBQUdBLENBQUMsR0FBR0EsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHQyxDQUFDO0FBQ2xELENBQUM7QUFDTSxJQUFNVyxXQUFXLEdBQUcsU0FBZEEsV0FBV0EsQ0FBSVosQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBRUMsQ0FBQyxFQUFLO0VBQ3ZDLE9BQU9ELENBQUMsSUFBSUYsQ0FBQyxJQUFJRyxDQUFDLENBQUMsR0FBR0gsQ0FBQyxHQUFHQSxDQUFDLEdBQUdBLENBQUMsR0FBR0EsQ0FBQyxHQUFHQyxDQUFDO0FBQzNDLENBQUM7QUFDTSxJQUFNWSxZQUFZLEdBQUcsU0FBZkEsWUFBWUEsQ0FBSWIsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBRUMsQ0FBQyxFQUFLO0VBQ3hDLE9BQU9ELENBQUMsSUFBSSxDQUFDRixDQUFDLEdBQUdBLENBQUMsR0FBR0csQ0FBQyxHQUFHLENBQUMsSUFBSUgsQ0FBQyxHQUFHQSxDQUFDLEdBQUdBLENBQUMsR0FBR0EsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHQyxDQUFDO0FBQ3hELENBQUM7QUFDTSxJQUFNYSxjQUFjLEdBQUcsU0FBakJBLGNBQWNBLENBQUlkLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBSztFQUMxQyxJQUFJLENBQUNILENBQUMsSUFBSUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQ2hCLE9BQU9ELENBQUMsR0FBRyxDQUFDLEdBQUdGLENBQUMsR0FBR0EsQ0FBQyxHQUFHQSxDQUFDLEdBQUdBLENBQUMsR0FBR0EsQ0FBQyxHQUFHQyxDQUFDO0VBQ3hDLE9BQU9DLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQ0YsQ0FBQyxJQUFJLENBQUMsSUFBSUEsQ0FBQyxHQUFHQSxDQUFDLEdBQUdBLENBQUMsR0FBR0EsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHQyxDQUFDO0FBQ3JELENBQUM7QUFDTSxJQUFNYyxVQUFVLEdBQUcsU0FBYkEsVUFBVUEsQ0FBSWYsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBRUMsQ0FBQyxFQUFLO0VBQ3RDLE9BQU8sQ0FBQ0QsQ0FBQyxHQUFHcmdCLElBQUksQ0FBQ21oQixHQUFHLENBQUNoQixDQUFDLEdBQUdHLENBQUMsSUFBSXRnQixJQUFJLENBQUNvaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUdmLENBQUMsR0FBR0QsQ0FBQztBQUN2RCxDQUFDO0FBQ00sSUFBTWlCLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFJbEIsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBRUMsQ0FBQyxFQUFLO0VBQ3ZDLE9BQU9ELENBQUMsR0FBR3JnQixJQUFJLENBQUNzaEIsR0FBRyxDQUFDbkIsQ0FBQyxHQUFHRyxDQUFDLElBQUl0Z0IsSUFBSSxDQUFDb2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHaEIsQ0FBQztBQUNsRCxDQUFDO0FBQ00sSUFBTW1CLGFBQWEsR0FBRyxTQUFoQkEsYUFBYUEsQ0FBSXBCLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBSztFQUN6QyxPQUFPLENBQUNELENBQUMsR0FBRyxDQUFDLElBQUlyZ0IsSUFBSSxDQUFDbWhCLEdBQUcsQ0FBQ25oQixJQUFJLENBQUNvaEIsRUFBRSxHQUFHakIsQ0FBQyxHQUFHRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBR0YsQ0FBQztBQUN2RCxDQUFDO0FBQ00sSUFBTW9CLFVBQVUsR0FBRyxTQUFiQSxVQUFVQSxDQUFJckIsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBRUMsQ0FBQyxFQUFLO0VBQ3RDLE9BQVFILENBQUMsSUFBSSxDQUFDLEdBQUlDLENBQUMsR0FBR0MsQ0FBQyxHQUFHcmdCLElBQUksQ0FBQ3loQixHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSXRCLENBQUMsR0FBR0csQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUdGLENBQUM7QUFDL0QsQ0FBQztBQUNNLElBQU1zQixXQUFXLEdBQUcsU0FBZEEsV0FBV0EsQ0FBSXZCLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBSztFQUN2QyxPQUFRSCxDQUFDLElBQUlHLENBQUMsR0FBSUYsQ0FBQyxHQUFHQyxDQUFDLEdBQUdBLENBQUMsSUFBSSxDQUFDcmdCLElBQUksQ0FBQ3loQixHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHdEIsQ0FBQyxHQUFHRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBR0YsQ0FBQztBQUNyRSxDQUFDO0FBQ00sSUFBTXVCLGFBQWEsR0FBRyxTQUFoQkEsYUFBYUEsQ0FBSXhCLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBSztFQUN6QyxJQUFJSCxDQUFDLElBQUksQ0FBQyxFQUNOLE9BQU9DLENBQUM7RUFDWixJQUFJRCxDQUFDLElBQUlHLENBQUMsRUFDTixPQUFPRixDQUFDLEdBQUdDLENBQUM7RUFDaEIsSUFBSSxDQUFDRixDQUFDLElBQUlHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUNoQixPQUFPRCxDQUFDLEdBQUcsQ0FBQyxHQUFHcmdCLElBQUksQ0FBQ3loQixHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSXRCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHQyxDQUFDO0VBQ2hELE9BQU9DLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQ3JnQixJQUFJLENBQUN5aEIsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFdEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUdDLENBQUM7QUFDcEQsQ0FBQztBQUNNLElBQU13QixVQUFVLEdBQUcsU0FBYkEsVUFBVUEsQ0FBSXpCLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBSztFQUN0QyxPQUFPLENBQUNELENBQUMsSUFBSXJnQixJQUFJLENBQUM2aEIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDMUIsQ0FBQyxJQUFJRyxDQUFDLElBQUlILENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHQyxDQUFDO0FBQ3JELENBQUM7QUFDTSxJQUFNMEIsV0FBVyxHQUFHLFNBQWRBLFdBQVdBLENBQUkzQixDQUFDLEVBQUVDLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUs7RUFDdkMsT0FBT0QsQ0FBQyxHQUFHcmdCLElBQUksQ0FBQzZoQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMxQixDQUFDLEdBQUdBLENBQUMsR0FBR0csQ0FBQyxHQUFHLENBQUMsSUFBSUgsQ0FBQyxDQUFDLEdBQUdDLENBQUM7QUFDckQsQ0FBQztBQUNNLElBQU0yQixhQUFhLEdBQUcsU0FBaEJBLGFBQWFBLENBQUk1QixDQUFDLEVBQUVDLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUs7RUFDekMsSUFBSSxDQUFDSCxDQUFDLElBQUlHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUNoQixPQUFPLENBQUNELENBQUMsR0FBRyxDQUFDLElBQUlyZ0IsSUFBSSxDQUFDNmhCLElBQUksQ0FBQyxDQUFDLEdBQUcxQixDQUFDLEdBQUdBLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHQyxDQUFDO0VBQ2xELE9BQU9DLENBQUMsR0FBRyxDQUFDLElBQUlyZ0IsSUFBSSxDQUFDNmhCLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQzFCLENBQUMsSUFBSSxDQUFDLElBQUlBLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHQyxDQUFDO0FBQ3hELENBQUM7QUFDTSxJQUFNNEIsYUFBYSxHQUFHLFNBQWhCQSxhQUFhQSxDQUFJN0IsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBRUMsQ0FBQyxFQUFLO0VBQ3pDLElBQUkyQixDQUFDLEdBQUcsT0FBTztFQUNmLElBQUlDLENBQUMsR0FBRyxDQUFDO0VBQ1QsSUFBSUMsQ0FBQyxHQUFHOUIsQ0FBQztFQUNULElBQUlGLENBQUMsSUFBSSxDQUFDLEVBQ04sT0FBT0MsQ0FBQztFQUNaLElBQUksQ0FBQ0QsQ0FBQyxJQUFJRyxDQUFDLEtBQUssQ0FBQyxFQUNiLE9BQU9GLENBQUMsR0FBR0MsQ0FBQztFQUNoQixJQUFJLENBQUM2QixDQUFDLEVBQ0ZBLENBQUMsR0FBRzVCLENBQUMsR0FBRyxFQUFFO0VBQ2QsSUFBSTZCLENBQUMsR0FBR25pQixJQUFJLENBQUNvaUIsR0FBRyxDQUFDL0IsQ0FBQyxDQUFDLEVBQUU7SUFDakI4QixDQUFDLEdBQUc5QixDQUFDO0lBQ0wsSUFBSTRCLENBQUMsR0FBR0MsQ0FBQyxHQUFHLENBQUM7RUFDakIsQ0FBQyxNQUVHLElBQUlELENBQUMsR0FBR0MsQ0FBQyxJQUFJLENBQUMsR0FBR2xpQixJQUFJLENBQUNvaEIsRUFBRSxDQUFDLEdBQUdwaEIsSUFBSSxDQUFDcWlCLElBQUksQ0FBQ2hDLENBQUMsR0FBRzhCLENBQUMsQ0FBQztFQUNoRCxPQUFPLEVBQUVBLENBQUMsR0FBR25pQixJQUFJLENBQUN5aEIsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUl0QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBR25nQixJQUFJLENBQUNzaEIsR0FBRyxDQUFDLENBQUNuQixDQUFDLEdBQUdHLENBQUMsR0FBRzJCLENBQUMsS0FBSyxDQUFDLEdBQUdqaUIsSUFBSSxDQUFDb2hCLEVBQUUsQ0FBQyxHQUFHYyxDQUFDLENBQUMsQ0FBQyxHQUFHOUIsQ0FBQztBQUM1RixDQUFDO0FBQ00sSUFBTWtDLGNBQWMsR0FBRyxTQUFqQkEsY0FBY0EsQ0FBSW5DLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBSztFQUMxQyxJQUFJMkIsQ0FBQyxHQUFHLE9BQU87RUFDZixJQUFJQyxDQUFDLEdBQUcsQ0FBQztFQUNULElBQUlDLENBQUMsR0FBRzlCLENBQUM7RUFDVCxJQUFJRixDQUFDLElBQUksQ0FBQyxFQUNOLE9BQU9DLENBQUM7RUFDWixJQUFJLENBQUNELENBQUMsSUFBSUcsQ0FBQyxLQUFLLENBQUMsRUFDYixPQUFPRixDQUFDLEdBQUdDLENBQUM7RUFDaEIsSUFBSSxDQUFDNkIsQ0FBQyxFQUNGQSxDQUFDLEdBQUc1QixDQUFDLEdBQUcsRUFBRTtFQUNkLElBQUk2QixDQUFDLEdBQUduaUIsSUFBSSxDQUFDb2lCLEdBQUcsQ0FBQy9CLENBQUMsQ0FBQyxFQUFFO0lBQ2pCOEIsQ0FBQyxHQUFHOUIsQ0FBQztJQUNMLElBQUk0QixDQUFDLEdBQUdDLENBQUMsR0FBRyxDQUFDO0VBQ2pCLENBQUMsTUFFRyxJQUFJRCxDQUFDLEdBQUdDLENBQUMsSUFBSSxDQUFDLEdBQUdsaUIsSUFBSSxDQUFDb2hCLEVBQUUsQ0FBQyxHQUFHcGhCLElBQUksQ0FBQ3FpQixJQUFJLENBQUNoQyxDQUFDLEdBQUc4QixDQUFDLENBQUM7RUFDaEQsT0FBT0EsQ0FBQyxHQUFHbmlCLElBQUksQ0FBQ3loQixHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHdEIsQ0FBQyxDQUFDLEdBQUduZ0IsSUFBSSxDQUFDc2hCLEdBQUcsQ0FBQyxDQUFDbkIsQ0FBQyxHQUFHRyxDQUFDLEdBQUcyQixDQUFDLEtBQUssQ0FBQyxHQUFHamlCLElBQUksQ0FBQ29oQixFQUFFLENBQUMsR0FBR2MsQ0FBQyxDQUFDLEdBQUc3QixDQUFDLEdBQUdELENBQUM7QUFDdkYsQ0FBQztBQUNNLElBQU1tQyxnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQWdCQSxDQUFJcEMsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBRUMsQ0FBQyxFQUFLO0VBQzVDLElBQUkyQixDQUFDLEdBQUcsT0FBTztFQUNmLElBQUlDLENBQUMsR0FBRyxDQUFDO0VBQ1QsSUFBSUMsQ0FBQyxHQUFHOUIsQ0FBQztFQUNULElBQUlGLENBQUMsSUFBSSxDQUFDLEVBQ04sT0FBT0MsQ0FBQztFQUNaLElBQUksQ0FBQ0QsQ0FBQyxJQUFJRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFDakIsT0FBT0YsQ0FBQyxHQUFHQyxDQUFDO0VBQ2hCLElBQUksQ0FBQzZCLENBQUMsRUFDRkEsQ0FBQyxHQUFHNUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDdEIsSUFBSTZCLENBQUMsR0FBR25pQixJQUFJLENBQUNvaUIsR0FBRyxDQUFDL0IsQ0FBQyxDQUFDLEVBQUU7SUFDakI4QixDQUFDLEdBQUc5QixDQUFDO0lBQ0wsSUFBSTRCLENBQUMsR0FBR0MsQ0FBQyxHQUFHLENBQUM7RUFDakIsQ0FBQyxNQUVHLElBQUlELENBQUMsR0FBR0MsQ0FBQyxJQUFJLENBQUMsR0FBR2xpQixJQUFJLENBQUNvaEIsRUFBRSxDQUFDLEdBQUdwaEIsSUFBSSxDQUFDcWlCLElBQUksQ0FBQ2hDLENBQUMsR0FBRzhCLENBQUMsQ0FBQztFQUNoRCxJQUFJaEMsQ0FBQyxHQUFHLENBQUMsRUFDTCxPQUFPLENBQUMsRUFBRSxJQUFJZ0MsQ0FBQyxHQUFHbmlCLElBQUksQ0FBQ3loQixHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSXRCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHbmdCLElBQUksQ0FBQ3NoQixHQUFHLENBQUMsQ0FBQ25CLENBQUMsR0FBR0csQ0FBQyxHQUFHMkIsQ0FBQyxLQUFLLENBQUMsR0FBR2ppQixJQUFJLENBQUNvaEIsRUFBRSxDQUFDLEdBQUdjLENBQUMsQ0FBQyxDQUFDLEdBQUc5QixDQUFDO0VBQ2pHLE9BQU8rQixDQUFDLEdBQUduaUIsSUFBSSxDQUFDeWhCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUl0QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBR25nQixJQUFJLENBQUNzaEIsR0FBRyxDQUFDLENBQUNuQixDQUFDLEdBQUdHLENBQUMsR0FBRzJCLENBQUMsS0FBSyxDQUFDLEdBQUdqaUIsSUFBSSxDQUFDb2hCLEVBQUUsQ0FBQyxHQUFHYyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUc3QixDQUFDLEdBQUdELENBQUM7QUFDbkcsQ0FBQztBQUNNLElBQU1vQyxVQUFVLEdBQUcsU0FBYkEsVUFBVUEsQ0FBSXJDLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBa0I7RUFBQSxJQUFoQjJCLENBQUMsR0FBQTlnQixTQUFBLENBQUFsTSxNQUFBLFFBQUFrTSxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLE9BQU87RUFDOUMsT0FBT2tmLENBQUMsSUFBSUYsQ0FBQyxJQUFJRyxDQUFDLENBQUMsR0FBR0gsQ0FBQyxJQUFJLENBQUM4QixDQUFDLEdBQUcsQ0FBQyxJQUFJOUIsQ0FBQyxHQUFHOEIsQ0FBQyxDQUFDLEdBQUc3QixDQUFDO0FBQ25ELENBQUM7QUFDTSxJQUFNcUMsV0FBVyxHQUFHLFNBQWRBLFdBQVdBLENBQUl0QyxDQUFDLEVBQUVDLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQWtCO0VBQUEsSUFBaEIyQixDQUFDLEdBQUE5Z0IsU0FBQSxDQUFBbE0sTUFBQSxRQUFBa00sU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxPQUFPO0VBQy9DLE9BQU9rZixDQUFDLElBQUksQ0FBQ0YsQ0FBQyxHQUFHQSxDQUFDLEdBQUdHLENBQUMsR0FBRyxDQUFDLElBQUlILENBQUMsSUFBSSxDQUFDOEIsQ0FBQyxHQUFHLENBQUMsSUFBSTlCLENBQUMsR0FBRzhCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHN0IsQ0FBQztBQUNoRSxDQUFDO0FBQ00sSUFBTXNDLGFBQWEsR0FBRyxTQUFoQkEsYUFBYUEsQ0FBSXZDLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBa0I7RUFBQSxJQUFoQjJCLENBQUMsR0FBQTlnQixTQUFBLENBQUFsTSxNQUFBLFFBQUFrTSxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLE9BQU87RUFDakQsSUFBSSxDQUFDZ2YsQ0FBQyxJQUFJRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFDaEIsT0FBT0QsQ0FBQyxHQUFHLENBQUMsSUFBSUYsQ0FBQyxHQUFHQSxDQUFDLElBQUksQ0FBQyxDQUFDOEIsQ0FBQyxJQUFLLEtBQU0sSUFBSSxDQUFDLElBQUk5QixDQUFDLEdBQUc4QixDQUFDLENBQUMsQ0FBQyxHQUFHN0IsQ0FBQztFQUMvRCxPQUFPQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUNGLENBQUMsSUFBSSxDQUFDLElBQUlBLENBQUMsSUFBSSxDQUFDLENBQUM4QixDQUFDLElBQUssS0FBTSxJQUFJLENBQUMsSUFBSTlCLENBQUMsR0FBRzhCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHN0IsQ0FBQztBQUMxRSxDQUFDO0FBQ00sSUFBTXVDLFlBQVksR0FBRyxTQUFmQSxZQUFZQSxDQUFJeEMsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBRUMsQ0FBQyxFQUFLO0VBQ3hDLE9BQU9ELENBQUMsR0FBR3VDLGFBQWEsQ0FBQ3RDLENBQUMsR0FBR0gsQ0FBQyxFQUFFLENBQUMsRUFBRUUsQ0FBQyxFQUFFQyxDQUFDLENBQUMsR0FBR0YsQ0FBQztBQUNoRCxDQUFDO0FBQ00sSUFBTXdDLGFBQWEsR0FBRyxTQUFoQkEsYUFBYUEsQ0FBSXpDLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBSztFQUN6QyxJQUFJLENBQUNILENBQUMsSUFBSUcsQ0FBQyxJQUFLLENBQUMsR0FBRyxJQUFLLEVBQUU7SUFDdkIsT0FBT0QsQ0FBQyxJQUFJLE1BQU0sR0FBR0YsQ0FBQyxHQUFHQSxDQUFDLENBQUMsR0FBR0MsQ0FBQztFQUNuQyxDQUFDLE1BQ0ksSUFBSUQsQ0FBQyxHQUFJLENBQUMsR0FBRyxJQUFLLEVBQUU7SUFDckIsT0FBT0UsQ0FBQyxJQUFJLE1BQU0sSUFBSUYsQ0FBQyxJQUFLLEdBQUcsR0FBRyxJQUFLLENBQUMsR0FBR0EsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHQyxDQUFDO0VBQzNELENBQUMsTUFDSSxJQUFJRCxDQUFDLEdBQUksR0FBRyxHQUFHLElBQUssRUFBRTtJQUN2QixPQUFPRSxDQUFDLElBQUksTUFBTSxJQUFJRixDQUFDLElBQUssSUFBSSxHQUFHLElBQUssQ0FBQyxHQUFHQSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUdDLENBQUM7RUFDOUQsQ0FBQyxNQUNJO0lBQ0QsT0FBT0MsQ0FBQyxJQUFJLE1BQU0sSUFBSUYsQ0FBQyxJQUFLLEtBQUssR0FBRyxJQUFLLENBQUMsR0FBR0EsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHQyxDQUFDO0VBQ2pFO0FBQ0osQ0FBQztBQUNNLElBQU15QyxlQUFlLEdBQUcsU0FBbEJBLGVBQWVBLENBQUkxQyxDQUFDLEVBQUVDLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUs7RUFDM0MsSUFBSUgsQ0FBQyxHQUFHRyxDQUFDLEdBQUcsQ0FBQyxFQUNULE9BQU9xQyxZQUFZLENBQUN4QyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRUUsQ0FBQyxFQUFFQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUdGLENBQUM7RUFDaEQsT0FBT3dDLGFBQWEsQ0FBQ3pDLENBQUMsR0FBRyxDQUFDLEdBQUdHLENBQUMsRUFBRSxDQUFDLEVBQUVELENBQUMsRUFBRUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHRCxDQUFDLEdBQUcsRUFBRSxHQUFHRCxDQUFDO0FBQzlELENBQUM7Ozs7Ozs7Ozs7Ozs7O0FDN0tEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBcGdCLElBQUksQ0FBQzJnQixjQUFjLEdBQUcsVUFBVVIsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBRUMsQ0FBQyxFQUFFO0VBQ3hDLElBQUksQ0FBQ0gsQ0FBQyxJQUFFRyxDQUFDLEdBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPRCxDQUFDLEdBQUMsQ0FBQyxHQUFDRixDQUFDLEdBQUNBLENBQUMsR0FBQ0EsQ0FBQyxHQUFHQyxDQUFDO0VBQUMsT0FBT0MsQ0FBQyxHQUFDLENBQUMsSUFBRSxDQUFDRixDQUFDLElBQUUsQ0FBQyxJQUFFQSxDQUFDLEdBQUNBLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBR0MsQ0FBQztBQUMxRSxDQUFDO0FBRU0sSUFBTTBDLFlBQVksR0FBRyxTQUFmQSxZQUFZQSxDQUFJQyxNQUFNLEVBQUs7RUFDcEMsSUFBSS9WLE9BQU8sR0FBRyxPQUFPK1YsTUFBTSxDQUFDL1YsT0FBTyxLQUFLLFdBQVcsR0FBRytWLE1BQU0sQ0FBQy9WLE9BQU8sR0FBRzlVLE1BQU07RUFDN0UsSUFBSThxQixFQUFFLEdBQUdELE1BQU0sQ0FBQ0MsRUFBRTtFQUNsQixJQUFJQyxRQUFRLEdBQUcsT0FBT0YsTUFBTSxDQUFDRSxRQUFRLEtBQUssV0FBVyxHQUFHRixNQUFNLENBQUNFLFFBQVEsR0FBRyxHQUFHO0VBQzdFLElBQUlDLFFBQVEsR0FBRyxPQUFPSCxNQUFNLENBQUNHLFFBQVEsS0FBSyxXQUFXLEdBQUdILE1BQU0sQ0FBQ0csUUFBUSxHQUFHLElBQUk7RUFDOUUsSUFBSUMsTUFBTSxHQUFHLE9BQU9KLE1BQU0sQ0FBQ0ksTUFBTSxLQUFLLFdBQVcsR0FBR0osTUFBTSxDQUFDSSxNQUFNLEdBQUduakIsSUFBSSxDQUFDMmdCLGNBQWM7RUFFdkYsSUFBSXlDLEtBQUssR0FBR3BXLE9BQU8sS0FBRzlVLE1BQU0sR0FBRzhVLE9BQU8sQ0FBQ2xILFNBQVMsR0FBRyxDQUFDNU4sTUFBTSxDQUFDeWxCLFdBQVcsSUFBSS9uQixRQUFRLENBQUN5WCxlQUFlLENBQUN2SCxTQUFTLEtBQU1sUSxRQUFRLENBQUN5WCxlQUFlLENBQUNnVyxTQUFTLElBQUksQ0FBQyxDQUFDO0VBQzFKLElBQUlDLE1BQU0sR0FBR04sRUFBRSxHQUFHSSxLQUFLO0VBQ3ZCLElBQUk1YSxXQUFXLEdBQUcsQ0FBQztFQUNuQixJQUFJK2EsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDOztFQUVwQixJQUFNQyxhQUFhLEdBQUcsU0FBaEJBLGFBQWFBLENBQUEsRUFBUztJQUV4QmhiLFdBQVcsSUFBSSthLFNBQVM7SUFDeEIsSUFBSUUsV0FBVyxHQUFHUixRQUFRLEdBQUdFLE1BQU0sQ0FBQzNhLFdBQVcsRUFBRTRhLEtBQUssRUFBRUUsTUFBTSxFQUFFTCxRQUFRLENBQUMsR0FBR0QsRUFBRTtJQUM5RWhXLE9BQU8sQ0FBQzBXLFFBQVEsQ0FBQyxDQUFDLEVBQUVELFdBQVcsQ0FBQztJQUVoQyxJQUFJamIsV0FBVyxHQUFHeWEsUUFBUSxFQUFFO01BQ3hCNXJCLFVBQVUsQ0FBQ21zQixhQUFhLEVBQUVELFNBQVMsQ0FBQztJQUN4QyxDQUFDLE1BQU0sSUFBSUwsUUFBUSxFQUFDO01BQ2hCQSxRQUFRLENBQUMsQ0FBQztJQUNkO0VBQ0osQ0FBQztFQUVETSxhQUFhLENBQUMsQ0FBQztBQUNuQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZDNEU7QUFFOUQsU0FBUzNFLFdBQVdBLENBQUEsRUFBRztFQUVsQyxJQUFNOEUsT0FBTyxHQUFHL3RCLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLGFBQWEsQ0FBQztFQUNyRCxJQUFNK3RCLFFBQVEsR0FBR2h1QixRQUFRLENBQUNNLGdCQUFnQixDQUFDLGFBQWEsQ0FBQztFQUV6RCxJQUFJeXRCLE9BQU8sRUFBRTtJQUNULElBQUkvbEIsTUFBTSxDQUFDLENBQUMsQ0FBQ2ltQixlQUFlLEVBQUU7TUFDMUI3dUIsQ0FBQyxDQUFDLFlBQU07UUFDSjR1QixRQUFRLENBQUN6dEIsT0FBTyxDQUFDLFVBQUMydEIsSUFBSSxFQUFFMWhCLENBQUMsRUFBSztVQUUxQjtVQUNBcE4sQ0FBQyxDQUFDOHVCLElBQUksQ0FBQyxDQUFDRCxlQUFlLENBQUM7WUFDcEIxckIsTUFBTSxFQUFFLElBQUk7WUFDWjRyQixZQUFZLEVBQUUsRUFBRTtZQUNoQkwsUUFBUSxFQUFFLE9BQU87WUFBRTtZQUNuQk0sY0FBYyxFQUFFLEdBQUc7WUFDbkJDLGVBQWUsRUFBRSxlQUFlO1lBQ2hDQyxPQUFPLEVBQUUsSUFBSTtZQUFFO1lBQ2ZDLFFBQVEsRUFBRSxFQUFFO1lBQUU7WUFDZEMsUUFBUSxFQUFFLEVBQUU7WUFBRTtZQUNkQyxTQUFTLEVBQUUsT0FBTztZQUFFO1lBQ3BCQyxPQUFPLFdBQUFBLFFBQUEsRUFBRztjQUNOO1lBQUEsQ0FDSDtZQUNEQyxTQUFTLFdBQUFBLFVBQUEsRUFBRztjQUNSO1lBQUEsQ0FFSDtZQUNEQyxRQUFRLFdBQUFBLFNBQUEsRUFBRztjQUNQO1lBQUE7VUFFUixDQUFDLENBQUM7UUFDTixDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7SUFDTixDQUFDLE1BQU07TUFDSHJvQixPQUFPLENBQUNDLEdBQUcsQ0FBQyw0Q0FBNEMsQ0FBQztJQUM3RDtFQUVKO0FBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQSxJQVNNd2lCLFdBQVc7RUFDYixTQUFBQSxZQUFZcGlCLE9BQU8sRUFBRTtJQUFBaEUsZUFBQSxPQUFBb21CLFdBQUE7SUFDakIsSUFBSSxDQUFDNkYsUUFBUSxHQUFHO01BQ1pyQixLQUFLLEVBQUUsQ0FBQztNQUNSc0IsR0FBRyxFQUFFLEdBQUc7TUFDUnpCLFFBQVEsRUFBRSxJQUFJO01BQ2RqWCxLQUFLLEVBQUUsRUFBRTtNQUNUMlksSUFBSSxFQUFFLElBQUk7TUFDVkMsUUFBUSxFQUFFLENBQUM7TUFDWEMsTUFBTSxFQUFFLElBQUk7TUFDWkMsUUFBUSxFQUFFLEtBQUs7TUFDZkMsY0FBYyxFQUFFLEtBQUs7TUFDckJDLFNBQVMsRUFBRSxLQUFLO01BQ2hCQyxlQUFlLEVBQUUsR0FBRztNQUNwQnZkLFFBQVEsRUFBRTtJQUNkLENBQUM7SUFFRCxJQUFJLENBQUN3ZCxhQUFhLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQ1gsUUFBUSxFQUFFam9CLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQztJQUVwRSxJQUFJLENBQUM2b0Isc0JBQXNCLENBQUMsQ0FBQztFQUNqQztFQUFDLE9BQUF2c0IsWUFBQSxDQUFBOGxCLFdBQUE7SUFBQTdsQixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBcXNCLHVCQUFBLEVBQXlCO01BQUEsSUFBQW5zQixLQUFBO01BQ3JCLElBQUlvc0IsUUFBUSxHQUFHMXZCLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUMsSUFBSSxDQUFDZ3ZCLGFBQWEsQ0FBQ3hkLFFBQVEsQ0FBQztNQUNyRSxJQUFJNmQscUJBQXFCLEdBQUcsSUFBSSxDQUFDQyw2QkFBNkIsQ0FBQyxDQUFDO01BRWhFLElBQUlELHFCQUFxQixFQUFFO1FBQ3ZCLElBQUlFLGlCQUFpQixHQUFHLElBQUlwWixvQkFBb0IsQ0FBQyxJQUFJLENBQUNxWixlQUFlLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUM5RSxNQUFNLEVBQUUsSUFBSTtVQUNaLFlBQVksRUFBRSxNQUFNO1VBQ3BCLFdBQVcsRUFBRTtRQUNqQixDQUFDLENBQUM7UUFFRkwsUUFBUSxDQUFDbnZCLE9BQU8sQ0FBQyxVQUFBNlcsT0FBTyxFQUFJO1VBQ3hCeVksaUJBQWlCLENBQUN2ZSxPQUFPLENBQUM4RixPQUFPLENBQUM7UUFDdEMsQ0FBQyxDQUFDO01BQ04sQ0FBQyxNQUFNO1FBQ0gsSUFBSTlVLE1BQU0sQ0FBQ3RCLGdCQUFnQixFQUFFO1VBQ3pCLElBQUksQ0FBQ2d2QixhQUFhLENBQUNOLFFBQVEsQ0FBQztVQUU1QnB0QixNQUFNLENBQUN0QixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsVUFBQTBDLENBQUMsRUFBSTtZQUNuQ0osS0FBSSxDQUFDMHNCLGFBQWEsQ0FBQ04sUUFBUSxDQUFDO1VBQ2hDLENBQUMsRUFBRTtZQUFFLFNBQVMsRUFBRTtVQUFLLENBQUMsQ0FBQztRQUMzQjtNQUNKO0lBQ0o7RUFBQztJQUFBdnNCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUE0c0IsY0FBY04sUUFBUSxFQUFFO01BQUEsSUFBQU8sTUFBQTtNQUNwQlAsUUFBUSxDQUFDbnZCLE9BQU8sQ0FBQyxVQUFBNlcsT0FBTyxFQUFJO1FBQ3hCLElBQUk4WSxNQUFNLEdBQUdELE1BQUksQ0FBQ0UsV0FBVyxDQUFDL1ksT0FBTyxDQUFDO1FBQ3RDLElBQUc4WSxNQUFNLENBQUNqQixNQUFNLEtBQUssSUFBSSxJQUFJZ0IsTUFBSSxDQUFDRyxlQUFlLENBQUNoWixPQUFPLENBQUMsRUFBRTtVQUN4RDZZLE1BQUksQ0FBQ0gsZUFBZSxDQUFDLENBQUMxWSxPQUFPLENBQUMsQ0FBQztRQUNuQztNQUNKLENBQUMsQ0FBQztJQUNOO0VBQUM7SUFBQWpVLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUEwc0IsZ0JBQWdCSixRQUFRLEVBQUV0ZSxRQUFRLEVBQUU7TUFBQSxJQUFBaWYsTUFBQTtNQUNoQ1gsUUFBUSxDQUFDbnZCLE9BQU8sQ0FBQyxVQUFBNlcsT0FBTyxFQUFJO1FBQ3hCLElBQUlrWixHQUFHLEdBQUdsWixPQUFPLENBQUMvUSxNQUFNLElBQUkrUSxPQUFPLENBQUMsQ0FBQztRQUNyQyxJQUFJbVosYUFBYSxHQUFHRixNQUFJLENBQUNGLFdBQVcsQ0FBQ0csR0FBRyxDQUFDLENBQUMsQ0FBQzs7UUFFM0M7UUFDQSxJQUFJQyxhQUFhLENBQUNsRCxRQUFRLElBQUksQ0FBQyxFQUFFO1VBQzdCLE9BQU9pRCxHQUFHLENBQUNwaUIsU0FBUyxHQUFHbWlCLE1BQUksQ0FBQ0csWUFBWSxDQUFDRCxhQUFhLENBQUN6QixHQUFHLEVBQUV5QixhQUFhLENBQUM7UUFDOUU7UUFFQSxJQUFLLENBQUNuZixRQUFRLElBQUksQ0FBQ2lmLE1BQUksQ0FBQ0QsZUFBZSxDQUFDaFosT0FBTyxDQUFDLElBQU1oRyxRQUFRLElBQUlnRyxPQUFPLENBQUNxWixpQkFBaUIsR0FBRyxHQUFJLEVBQUU7VUFDaEcsSUFBSXJ0QixLQUFLLEdBQUdtdEIsYUFBYSxDQUFDL0MsS0FBSyxHQUFHK0MsYUFBYSxDQUFDekIsR0FBRyxHQUFHeUIsYUFBYSxDQUFDekIsR0FBRyxHQUFHeUIsYUFBYSxDQUFDL0MsS0FBSztVQUM3RixPQUFPOEMsR0FBRyxDQUFDcGlCLFNBQVMsR0FBR21pQixNQUFJLENBQUNHLFlBQVksQ0FBQ3B0QixLQUFLLEVBQUVtdEIsYUFBYSxDQUFDO1FBQ2xFOztRQUVBO1FBQ0E5dUIsVUFBVSxDQUFDLFlBQU07VUFDYixPQUFPNHVCLE1BQUksQ0FBQ0ssWUFBWSxDQUFDSixHQUFHLEVBQUVDLGFBQWEsQ0FBQztRQUNoRCxDQUFDLEVBQUVBLGFBQWEsQ0FBQ25hLEtBQUssQ0FBQztNQUMzQixDQUFDLENBQUM7SUFDTjtFQUFDO0lBQUFqVCxHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBc3RCLGFBQWF0WixPQUFPLEVBQUU4WSxNQUFNLEVBQUU7TUFBQSxJQUFBUyxNQUFBO01BQzFCO01BQ0EsSUFBSUMsaUJBQWlCLEdBQUcsQ0FBQ1YsTUFBTSxDQUFDcEIsR0FBRyxHQUFHb0IsTUFBTSxDQUFDMUMsS0FBSyxLQUFLMEMsTUFBTSxDQUFDN0MsUUFBUSxHQUFHNkMsTUFBTSxDQUFDOVosS0FBSyxDQUFDO01BQ3RGO01BQ0EsSUFBSXlhLFNBQVMsR0FBRyxLQUFLOztNQUVyQjtNQUNBLElBQUlYLE1BQU0sQ0FBQzFDLEtBQUssR0FBRzBDLE1BQU0sQ0FBQ3BCLEdBQUcsRUFBRTtRQUMzQitCLFNBQVMsR0FBRyxLQUFLO1FBQ2pCRCxpQkFBaUIsSUFBSSxDQUFDLENBQUM7TUFDM0I7O01BRUE7TUFDQSxJQUFJRSxZQUFZLEdBQUcsSUFBSSxDQUFDQyxVQUFVLENBQUNiLE1BQU0sQ0FBQzFDLEtBQUssQ0FBQztNQUNoRDtNQUNBcFcsT0FBTyxDQUFDbEosU0FBUyxHQUFHLElBQUksQ0FBQ3NpQixZQUFZLENBQUNNLFlBQVksRUFBRVosTUFBTSxDQUFDOztNQUUzRDtNQUNBLElBQUdBLE1BQU0sQ0FBQ25CLElBQUksS0FBSyxJQUFJLEVBQUM7UUFDcEIzWCxPQUFPLENBQUMrRCxZQUFZLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDO01BQ3hEOztNQUVBO01BQ0EsSUFBSTZWLGFBQWEsR0FBRzF4QixXQUFXLENBQUMsWUFBTTtRQUNsQztRQUNBLElBQUkyeEIsT0FBTyxHQUFHTixNQUFJLENBQUNPLFVBQVUsQ0FBQ0osWUFBWSxFQUFFRixpQkFBaUIsRUFBRUMsU0FBUyxDQUFDO1FBQ3pFO1FBQ0F6WixPQUFPLENBQUNsSixTQUFTLEdBQUd5aUIsTUFBSSxDQUFDSCxZQUFZLENBQUNTLE9BQU8sRUFBRWYsTUFBTSxDQUFDO1FBQ3REO1FBQ0FZLFlBQVksR0FBR0csT0FBTzs7UUFFdEI7UUFDQSxJQUFLSCxZQUFZLElBQUlaLE1BQU0sQ0FBQ3BCLEdBQUcsSUFBSStCLFNBQVMsSUFBSSxLQUFLLElBQU1DLFlBQVksSUFBSVosTUFBTSxDQUFDcEIsR0FBRyxJQUFJK0IsU0FBUyxJQUFJLEtBQU0sRUFBRTtVQUMxR3paLE9BQU8sQ0FBQ2xKLFNBQVMsR0FBR3lpQixNQUFJLENBQUNILFlBQVksQ0FBQ04sTUFBTSxDQUFDcEIsR0FBRyxFQUFFb0IsTUFBTSxDQUFDO1VBQ3pEaUIsYUFBYSxDQUFDSCxhQUFhLENBQUM7UUFDaEM7TUFDSixDQUFDLEVBQUVkLE1BQU0sQ0FBQzlaLEtBQUssQ0FBQztJQUNwQjtFQUFDO0lBQUFqVCxHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBK3NCLFlBQVkvWSxPQUFPLEVBQUU7TUFBQSxJQUFBZ2EsTUFBQTtNQUVqQjtNQUNBO01BQ0EsSUFBSUMsVUFBVSxHQUFBdnBCLGFBQUEsS0FBTyxJQUFJLENBQUN3bkIsYUFBYSxDQUFDOztNQUV4QztNQUNBLElBQUlnQyxZQUFZLEdBQUcsRUFBRSxDQUFDM2xCLE1BQU0sQ0FBQ3liLElBQUksQ0FBQ2hRLE9BQU8sQ0FBQzdGLFVBQVUsRUFBRSxVQUFTcEUsSUFBSSxFQUFFO1FBQ2pFLE9BQU8sb0JBQW9CLENBQUNva0IsSUFBSSxDQUFDcGtCLElBQUksQ0FBQ3RKLElBQUksQ0FBQztNQUMvQyxDQUFDLENBQUM7O01BRUY7TUFDQSxJQUFJMHNCLGFBQWEsR0FBRyxDQUFDLENBQUM7O01BRXRCO01BQ0FlLFlBQVksQ0FBQy93QixPQUFPLENBQUMsVUFBQW1ELENBQUMsRUFBSTtRQUN0QixJQUFJRyxJQUFJLEdBQUdILENBQUMsQ0FBQ0csSUFBSSxDQUFDMEQsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDSSxXQUFXLENBQUMsQ0FBQztRQUNoRSxJQUFJdkUsS0FBSyxHQUFHUyxJQUFJLElBQUksVUFBVSxHQUFHaUIsUUFBUSxDQUFDc3NCLE1BQUksQ0FBQ0wsVUFBVSxDQUFDcnRCLENBQUMsQ0FBQ04sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUdndUIsTUFBSSxDQUFDTCxVQUFVLENBQUNydEIsQ0FBQyxDQUFDTixLQUFLLENBQUM7UUFDckdtdEIsYUFBYSxDQUFDMXNCLElBQUksQ0FBQyxHQUFHVCxLQUFLLENBQUMsQ0FBQztNQUNqQyxDQUFDLENBQUM7O01BRUY7TUFDQSxPQUFPbXNCLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDNkIsVUFBVSxFQUFFZCxhQUFhLENBQUM7SUFFbkQ7O0lBRUE7RUFBQTtJQUFBcHRCLEdBQUE7SUFBQUMsS0FBQSxFQUNBLFNBQUE4dEIsV0FBV00sTUFBTSxFQUFFQyxLQUFLLEVBQWdCO01BQUEsSUFBZEMsSUFBSSxHQUFBbm1CLFNBQUEsQ0FBQWxNLE1BQUEsUUFBQWtNLFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsS0FBSztNQUNsQztNQUNBaW1CLE1BQU0sR0FBRyxJQUFJLENBQUNULFVBQVUsQ0FBQ1MsTUFBTSxDQUFDO01BQ2hDQyxLQUFLLEdBQUcsSUFBSSxDQUFDVixVQUFVLENBQUNVLEtBQUssQ0FBQzs7TUFFOUI7TUFDQTtNQUNBLE9BQU9ubkIsVUFBVSxDQUFDb25CLElBQUksS0FBSyxLQUFLLEdBQUlGLE1BQU0sR0FBR0MsS0FBSyxHQUFLRCxNQUFNLEdBQUdDLEtBQU0sQ0FBQztJQUMzRTs7SUFFQTtFQUFBO0lBQUF0dUIsR0FBQTtJQUFBQyxLQUFBLEVBQ0EsU0FBQXV1Qix3QkFBeUJILE1BQU0sRUFBRXRCLE1BQU0sRUFBRTtNQUNyQyxJQUFJMEIsTUFBTSxHQUFHMUIsTUFBTSxDQUFDZixjQUFjLElBQUksRUFBRTtRQUFFO1FBQ3RDMEMsS0FBSyxHQUFHM0IsTUFBTSxDQUFDbEIsUUFBUSxJQUFJLENBQUM7UUFBRztRQUMvQndDLE1BQU0sR0FBR3BuQixJQUFJLENBQUNvaUIsR0FBRyxDQUFDdmUsTUFBTSxDQUFDdWpCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7TUFFdkM7TUFDQSxJQUFJcHVCLEtBQUssR0FBR291QixNQUFNLElBQUksT0FBTyxNQUFBendCLE1BQUEsQ0FBTSxDQUFDeXdCLE1BQU0sR0FBRyxPQUFPLEVBQUVobkIsT0FBTyxDQUFDcW5CLEtBQUssQ0FBQyxRQUFLO01BQUEsRUFDbkVMLE1BQU0sSUFBSSxNQUFNLE1BQUF6d0IsTUFBQSxDQUFNLENBQUN5d0IsTUFBTSxHQUFHLE1BQU0sRUFBRWhuQixPQUFPLENBQUNxbkIsS0FBSyxDQUFDLFFBQUs7TUFBQSxFQUN2REwsTUFBTSxJQUFJLE1BQU0sTUFBQXp3QixNQUFBLENBQU0sQ0FBQ3l3QixNQUFNLEdBQUcsTUFBTSxFQUFFaG5CLE9BQU8sQ0FBQ3FuQixLQUFLLENBQUMsUUFBTTtNQUFBLEVBQ3hETCxNQUFNLElBQUksTUFBTSxNQUFBendCLE1BQUEsQ0FBTSxDQUFDeXdCLE1BQU0sR0FBRyxPQUFPLEVBQUVobkIsT0FBTyxDQUFDcW5CLEtBQUssQ0FBQyxRQUFLO01BQUEsRUFDeERMLE1BQU0sQ0FBQ2huQixPQUFPLENBQUNxbkIsS0FBSyxDQUFDLENBQUMsQ0FBQzs7TUFFekM7TUFDQSxPQUFPRCxNQUFNLEdBQUd4dUIsS0FBSztJQUN6Qjs7SUFFQTtFQUFBO0lBQUFELEdBQUE7SUFBQUMsS0FBQSxFQUNBLFNBQUEwdUIsZUFBZTF1QixLQUFLLEVBQUU4c0IsTUFBTSxFQUFDO01BQ3pCO01BQ0EsSUFBSSxDQUFDQSxNQUFNLENBQUNkLFNBQVMsRUFBRTtRQUNuQixPQUFPaHNCLEtBQUssQ0FBQ21FLE9BQU8sQ0FBQyxJQUFJd3FCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO01BQ3JEOztNQUVBO01BQ0EsT0FBTzN1QixLQUFLLENBQUNtRSxPQUFPLENBQUMseUJBQXlCLEVBQUUsS0FBSyxDQUFDLENBQ2pEQSxPQUFPLENBQUMsSUFBSXdxQixNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFN0IsTUFBTSxDQUFDYixlQUFlLENBQUM7SUFDakU7O0lBRUE7RUFBQTtJQUFBbHNCLEdBQUE7SUFBQUMsS0FBQSxFQUNBLFNBQUFvdEIsYUFBYWdCLE1BQU0sRUFBRXRCLE1BQU0sRUFBRTtNQUN6QjtNQUNBLElBQUk4QixTQUFTLEdBQUc7UUFBQ0MscUJBQXFCLEVBQUUvQixNQUFNLENBQUNsQixRQUFRO1FBQUVrRCxxQkFBcUIsRUFBRWhDLE1BQU0sQ0FBQ2xCO01BQVEsQ0FBQztNQUNoRztNQUNBd0MsTUFBTSxHQUFHdEIsTUFBTSxDQUFDaEIsUUFBUSxHQUFHLElBQUksQ0FBQ3lDLHVCQUF1QixDQUFDSCxNQUFNLEVBQUV0QixNQUFNLENBQUMsR0FBRzVsQixVQUFVLENBQUNrbkIsTUFBTSxDQUFDOztNQUU1RjtNQUNBLE9BQU8sSUFBSSxDQUFDTSxjQUFjLENBQUNOLE1BQU0sQ0FBQ1csY0FBYyxDQUFDM21CLFNBQVMsRUFBRXdtQixTQUFTLENBQUMsRUFBRTlCLE1BQU0sQ0FBQztJQUNuRjs7SUFFQTtFQUFBO0lBQUEvc0IsR0FBQTtJQUFBQyxLQUFBLEVBQ0EsU0FBQTJ0QixXQUFXbG1CLElBQUksRUFBRTtNQUNiO01BQ0EsSUFBSSxrQkFBa0IsQ0FBQzBtQixJQUFJLENBQUMxbUIsSUFBSSxDQUFDLEVBQUU7UUFDL0IsT0FBT1AsVUFBVSxDQUFDTyxJQUFJLENBQUM7TUFDM0I7TUFDQTtNQUNBLElBQUksVUFBVSxDQUFDMG1CLElBQUksQ0FBQzFtQixJQUFJLENBQUMsRUFBRTtRQUN2QixPQUFPL0YsUUFBUSxDQUFDK0YsSUFBSSxDQUFDO01BQ3pCO01BQ0E7TUFDQSxJQUFJLGNBQWMsQ0FBQzBtQixJQUFJLENBQUMxbUIsSUFBSSxDQUFDLEVBQUU7UUFDM0IsT0FBTyxRQUFRLENBQUMwbUIsSUFBSSxDQUFDMW1CLElBQUksQ0FBQztNQUM5QjtNQUNBO01BQ0EsT0FBT0EsSUFBSTtJQUNmOztJQUVBO0VBQUE7SUFBQTFILEdBQUE7SUFBQUMsS0FBQSxFQUNBLFNBQUFndEIsZ0JBQWdCaFosT0FBTyxFQUFFO01BQ3JCLElBQUk1VSxHQUFHLEdBQUc0VSxPQUFPLENBQUNnYixTQUFTO01BQzNCLElBQUkzdkIsSUFBSSxHQUFHMlUsT0FBTyxDQUFDaU0sVUFBVTtNQUM3QixJQUFJdlMsS0FBSyxHQUFHc0csT0FBTyxDQUFDeUMsV0FBVztNQUMvQixJQUFJbFosTUFBTSxHQUFHeVcsT0FBTyxDQUFDeFcsWUFBWTtNQUVqQyxPQUFPd1csT0FBTyxDQUFDaWIsWUFBWSxFQUFFO1FBQ3pCamIsT0FBTyxHQUFHQSxPQUFPLENBQUNpYixZQUFZO1FBQzlCN3ZCLEdBQUcsSUFBSTRVLE9BQU8sQ0FBQ2diLFNBQVM7UUFDeEIzdkIsSUFBSSxJQUFJMlUsT0FBTyxDQUFDaU0sVUFBVTtNQUM5QjtNQUVBLE9BQ0k3Z0IsR0FBRyxJQUFJRixNQUFNLENBQUN5bEIsV0FBVyxJQUN6QnRsQixJQUFJLElBQUlILE1BQU0sQ0FBQ2d3QixXQUFXLElBQ3pCOXZCLEdBQUcsR0FBRzdCLE1BQU0sSUFBTTJCLE1BQU0sQ0FBQ3lsQixXQUFXLEdBQUd6bEIsTUFBTSxDQUFDaXdCLFdBQVksSUFDMUQ5dkIsSUFBSSxHQUFHcU8sS0FBSyxJQUFNeE8sTUFBTSxDQUFDZ3dCLFdBQVcsR0FBR2h3QixNQUFNLENBQUN1YSxVQUFXO0lBRWxFOztJQUVBO0VBQUE7SUFBQTFaLEdBQUE7SUFBQUMsS0FBQSxFQUNBLFNBQUF3c0IsOEJBQUEsRUFBZ0M7TUFDNUIsT0FBUSxzQkFBc0IsSUFBSXR0QixNQUFNLElBQ25DLDJCQUEyQixJQUFJQSxNQUFPLElBQ3RDLG1CQUFtQixJQUFJQSxNQUFNLENBQUNrd0IseUJBQXlCLENBQUN0TCxTQUFVO0lBQzNFO0VBQUM7QUFBQTtBQUlMLCtEQUFlOEIsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDM1BtQztBQUFBLElBRXZERCxpQkFBaUI7RUFDbkIsU0FBQUEsa0JBQVluaUIsT0FBTyxFQUFFO0lBQUFoRSxlQUFBLE9BQUFtbUIsaUJBQUE7SUFDakIsSUFBSSxDQUFDOEYsUUFBUSxHQUFHO01BQ1ovYyxRQUFRLEVBQUUsZ0JBQWdCO01BQzFCNGdCLE9BQU8sRUFBRSxlQUFlO01BQ3hCQyxPQUFPLEVBQUUsbUJBQW1CO01BQzVCdmEsT0FBTyxFQUFFO1FBQ0xwRixJQUFJLEVBQUUsV0FBVztRQUNqQjRmLElBQUksRUFBRSxXQUFXO1FBQ2pCQyxLQUFLLEVBQUU7TUFDWCxDQUFDO01BQ0RDLE9BQU8sRUFBRTtRQUNMbmdCLEtBQUssRUFBRSxVQUFVO1FBQ2pCb2dCLE9BQU8sRUFBRSxZQUFZO1FBQ3JCQyxLQUFLLEVBQUUsVUFBVTtRQUNqQkosSUFBSSxFQUFFLFVBQVU7UUFDaEJLLFVBQVUsRUFBRSxrQkFBa0I7UUFDOUJDLFdBQVcsRUFBRSxpQkFBaUI7UUFDOUJDLGVBQWUsRUFBRTtNQUNyQixDQUFDO01BQ0R6Z0IsUUFBUSxFQUFFO0lBQ2QsQ0FBQztJQUVELElBQUksQ0FBQ3dkLE1BQU0sR0FBR3VDLHNFQUFjLENBQUMsSUFBSSxDQUFDNUQsUUFBUSxFQUFFam9CLE9BQU8sQ0FBQztJQUNwRCxJQUFJLENBQUM2YyxLQUFLLEdBQUd6akIsUUFBUSxDQUFDTSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM0dkIsTUFBTSxDQUFDcGUsUUFBUSxDQUFDO0lBRTVELElBQUksQ0FBQzdPLElBQUksQ0FBQyxDQUFDO0VBQ2Y7RUFBQyxPQUFBQyxZQUFBLENBQUE2bEIsaUJBQUE7SUFBQTVsQixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBSCxLQUFBLEVBQU87TUFDSCxJQUFJbXdCLElBQUksR0FBRyxJQUFJO01BRWZBLElBQUksQ0FBQ0MsY0FBYyxHQUFHLElBQUksQ0FBQ3hnQixVQUFVLENBQUNrZCxJQUFJLENBQUMsSUFBSSxDQUFDO01BQ2hEcUQsSUFBSSxDQUFDRSxjQUFjLEdBQUcsSUFBSSxDQUFDcmdCLFVBQVUsQ0FBQzhjLElBQUksQ0FBQyxJQUFJLENBQUM7TUFDaERxRCxJQUFJLENBQUNHLGNBQWMsR0FBRyxJQUFJLENBQUNDLFVBQVUsQ0FBQ3pELElBQUksQ0FBQyxJQUFJLENBQUM7TUFFaEQwRCxrQkFBQSxDQUFJTCxJQUFJLENBQUMzUCxLQUFLLEVBQUVsakIsT0FBTyxDQUFDLFVBQUNtekIsS0FBSyxFQUFLO1FBRS9CLElBQUksQ0FBQ04sSUFBSSxDQUFDbEQsTUFBTSxDQUFDeGQsUUFBUSxFQUFFO1VBQ3ZCZ2hCLEtBQUssQ0FBQ2hoQixRQUFRLEdBQUcsS0FBSztRQUMxQjtRQUVBLElBQUlpaEIsY0FBYyxHQUFHRCxLQUFLLENBQUNwckIsYUFBYTtRQUN4Q3FyQixjQUFjLENBQUN2eUIsU0FBUyxDQUFDTSxHQUFHLENBQUMweEIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDd0MsT0FBTyxDQUFDO1FBQ2pELElBQUlrQixPQUFPLEdBQUdELGNBQWMsQ0FBQzF6QixhQUFhLENBQUNtekIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDOVgsT0FBTyxDQUFDcEYsSUFBSSxDQUFDO1FBQ3BFLElBQUk2Z0IsT0FBTyxHQUFHRixjQUFjLENBQUMxekIsYUFBYSxDQUFDbXpCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQzlYLE9BQU8sQ0FBQ3dhLElBQUksQ0FBQzs7UUFFcEU7O1FBRUEsSUFBSWdCLE9BQU8sRUFBRTtVQUNUQSxPQUFPLENBQUM1eUIsZ0JBQWdCLENBQUMsT0FBTyxFQUFFb3lCLElBQUksQ0FBQ0MsY0FBYyxDQUFDO1FBQzFEO1FBRUEsSUFBSVEsT0FBTyxFQUFFO1VBQ1RBLE9BQU8sQ0FBQzd5QixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUVveUIsSUFBSSxDQUFDRSxjQUFjLENBQUM7UUFDMUQ7O1FBRUE7UUFDQUksS0FBSyxDQUFDMXlCLGdCQUFnQixDQUFDLE9BQU8sRUFBRW95QixJQUFJLENBQUNHLGNBQWMsRUFBRSxLQUFLLENBQUM7UUFFM0QsSUFBSUcsS0FBSyxDQUFDdHlCLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDK3hCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQzRDLE9BQU8sQ0FBQ0ssZUFBZSxDQUFDLEVBQUU7VUFDL0RDLElBQUksQ0FBQ1UsU0FBUyxDQUFDSixLQUFLLENBQUM7UUFDekI7TUFDSixDQUFDLENBQUM7SUFDTjtFQUFDO0lBQUF2d0IsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQW93QixXQUFXbEwsRUFBRSxFQUFFO01BQ1gsSUFBSThLLElBQUksR0FBRyxJQUFJO01BQ2YsSUFBSU0sS0FBSyxHQUFHcEwsRUFBRSxDQUFDeUwsYUFBYTtNQUM1QixJQUFJQyxVQUFVLEdBQUdOLEtBQUssQ0FBQ3hrQixPQUFPLENBQUMsR0FBRyxHQUFHa2tCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ3dDLE9BQU8sQ0FBQztNQUN6RCxJQUFJa0IsT0FBTyxHQUFHSSxVQUFVLENBQUMvekIsYUFBYSxDQUFDbXpCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQzlYLE9BQU8sQ0FBQ3BGLElBQUksQ0FBQztNQUNoRSxJQUFJaWhCLFdBQVcsR0FBR0QsVUFBVSxDQUFDL3pCLGFBQWEsQ0FBQ216QixJQUFJLENBQUNsRCxNQUFNLENBQUN5QyxPQUFPLENBQUM7TUFFL0RlLEtBQUssQ0FBQy9nQixLQUFLLENBQUMsQ0FBQztNQUNiK2dCLEtBQUssQ0FBQzlnQixXQUFXLEdBQUcsQ0FBQztNQUNyQmdoQixPQUFPLENBQUN4eUIsU0FBUyxDQUFDTSxHQUFHLENBQUMweEIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDNEMsT0FBTyxDQUFDbmdCLEtBQUssQ0FBQztNQUNoRGloQixPQUFPLENBQUN4eUIsU0FBUyxDQUFDRSxNQUFNLENBQUM4eEIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDNEMsT0FBTyxDQUFDQyxPQUFPLENBQUM7TUFDckRpQixVQUFVLENBQUM1eUIsU0FBUyxDQUFDRSxNQUFNLENBQUM4eEIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDNEMsT0FBTyxDQUFDRyxVQUFVLENBQUM7TUFFM0QsSUFBSWdCLFdBQVcsRUFBRTtRQUNiQSxXQUFXLENBQUM3eUIsU0FBUyxDQUFDTSxHQUFHLENBQUMweEIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDNEMsT0FBTyxDQUFDbmdCLEtBQUssQ0FBQztNQUN4RDtJQUNKO0VBQUM7SUFBQXhQLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUF5UCxXQUFXeVYsRUFBRSxFQUFFO01BQ1gsSUFBSThLLElBQUksR0FBRyxJQUFJO01BQ2YsSUFBSXZxQixJQUFJLEdBQUd5ZixFQUFFLENBQUN5TCxhQUFhO01BQzNCLElBQUlDLFVBQVUsR0FBR25yQixJQUFJLENBQUNxRyxPQUFPLENBQUMsR0FBRyxHQUFHa2tCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ3dDLE9BQU8sQ0FBQztNQUN4RCxJQUFJZ0IsS0FBSyxHQUFHTSxVQUFVLENBQUMvekIsYUFBYSxDQUFDbXpCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ3BlLFFBQVEsQ0FBQztNQUMxRCxJQUFJbWlCLFdBQVcsR0FBR0QsVUFBVSxDQUFDL3pCLGFBQWEsQ0FBQ216QixJQUFJLENBQUNsRCxNQUFNLENBQUN5QyxPQUFPLENBQUM7TUFFL0QsSUFBSWUsS0FBSyxDQUFDNWdCLE1BQU0sSUFBSTRnQixLQUFLLENBQUMzZ0IsS0FBSyxFQUFFO1FBQzdCbEssSUFBSSxDQUFDekgsU0FBUyxDQUFDTSxHQUFHLENBQUMweEIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDNEMsT0FBTyxDQUFDQyxPQUFPLENBQUM7UUFDL0NpQixVQUFVLENBQUM1eUIsU0FBUyxDQUFDTSxHQUFHLENBQUMweEIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDNEMsT0FBTyxDQUFDRyxVQUFVLENBQUM7UUFDeERlLFVBQVUsQ0FBQzV5QixTQUFTLENBQUNFLE1BQU0sQ0FBQzh4QixJQUFJLENBQUNsRCxNQUFNLENBQUM0QyxPQUFPLENBQUNJLFdBQVcsQ0FBQztRQUM1RHJxQixJQUFJLENBQUN6SCxTQUFTLENBQUNFLE1BQU0sQ0FBQzh4QixJQUFJLENBQUNsRCxNQUFNLENBQUM0QyxPQUFPLENBQUNuZ0IsS0FBSyxDQUFDO1FBQ2hEK2dCLEtBQUssQ0FBQzFnQixJQUFJLENBQUMsQ0FBQztRQUVaLElBQUlpaEIsV0FBVyxFQUFFO1VBQ2JBLFdBQVcsQ0FBQzd5QixTQUFTLENBQUNFLE1BQU0sQ0FBQzh4QixJQUFJLENBQUNsRCxNQUFNLENBQUM0QyxPQUFPLENBQUNuZ0IsS0FBSyxDQUFDO1FBQzNEO01BQ0osQ0FBQyxNQUFNO1FBQ0g5SixJQUFJLENBQUN6SCxTQUFTLENBQUNNLEdBQUcsQ0FBQzB4QixJQUFJLENBQUNsRCxNQUFNLENBQUM0QyxPQUFPLENBQUNuZ0IsS0FBSyxDQUFDO1FBQzdDcWhCLFVBQVUsQ0FBQzV5QixTQUFTLENBQUNNLEdBQUcsQ0FBQzB4QixJQUFJLENBQUNsRCxNQUFNLENBQUM0QyxPQUFPLENBQUNJLFdBQVcsQ0FBQztRQUN6RGMsVUFBVSxDQUFDNXlCLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDOHhCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQzRDLE9BQU8sQ0FBQ0csVUFBVSxDQUFDO1FBQzNEcHFCLElBQUksQ0FBQ3pILFNBQVMsQ0FBQ0UsTUFBTSxDQUFDOHhCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQzRDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDO1FBQ2xEVyxLQUFLLENBQUMvZ0IsS0FBSyxDQUFDLENBQUM7UUFFYixJQUFJc2hCLFdBQVcsRUFBRTtVQUNiQSxXQUFXLENBQUM3eUIsU0FBUyxDQUFDTSxHQUFHLENBQUMweEIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDNEMsT0FBTyxDQUFDbmdCLEtBQUssQ0FBQztRQUN4RDtNQUNKO0lBQ0o7RUFBQztJQUFBeFAsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQTZQLFdBQVdxVixFQUFFLEVBQUU7TUFDWCxJQUFJOEssSUFBSSxHQUFHLElBQUk7TUFDZixJQUFJdnFCLElBQUksR0FBR3lmLEVBQUUsQ0FBQ3lMLGFBQWE7TUFDM0IsSUFBSUMsVUFBVSxHQUFHbnJCLElBQUksQ0FBQ3FHLE9BQU8sQ0FBQyxHQUFHLEdBQUdra0IsSUFBSSxDQUFDbEQsTUFBTSxDQUFDd0MsT0FBTyxDQUFDO01BQ3hELElBQUlnQixLQUFLLEdBQUdNLFVBQVUsQ0FBQy96QixhQUFhLENBQUNtekIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDcGUsUUFBUSxDQUFDO01BRTFENGhCLEtBQUssQ0FBQ3hnQixLQUFLLEdBQUcsQ0FBQ3dnQixLQUFLLENBQUN4Z0IsS0FBSztNQUMxQixJQUFJd2dCLEtBQUssQ0FBQ3hnQixLQUFLLEVBQUU7UUFDYnJLLElBQUksQ0FBQ3pILFNBQVMsQ0FBQ00sR0FBRyxDQUFDMHhCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQzRDLE9BQU8sQ0FBQ0YsSUFBSSxDQUFDO1FBQzVDL3BCLElBQUksQ0FBQ3pILFNBQVMsQ0FBQ0UsTUFBTSxDQUFDOHhCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQzRDLE9BQU8sQ0FBQ0UsS0FBSyxDQUFDO01BQ3BELENBQUMsTUFBTTtRQUNIbnFCLElBQUksQ0FBQ3pILFNBQVMsQ0FBQ00sR0FBRyxDQUFDMHhCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQzRDLE9BQU8sQ0FBQ0UsS0FBSyxDQUFDO1FBQzdDbnFCLElBQUksQ0FBQ3pILFNBQVMsQ0FBQ0UsTUFBTSxDQUFDOHhCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQzRDLE9BQU8sQ0FBQ0YsSUFBSSxDQUFDO01BQ25EO0lBQ0o7RUFBQztJQUFBenZCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUE4d0IsU0FBU3JyQixJQUFJLEVBQUU7TUFDWCxJQUFJdXFCLElBQUksR0FBRyxJQUFJO01BQ2YsSUFBSU0sS0FBSyxHQUFHN3FCLElBQUk7TUFDaEIsSUFBSThxQixjQUFjLEdBQUdELEtBQUssQ0FBQ3ByQixhQUFhO01BQ3hDLElBQUlzckIsT0FBTyxHQUFHRCxjQUFjLENBQUMxekIsYUFBYSxDQUFDbXpCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQzlYLE9BQU8sQ0FBQ3BGLElBQUksQ0FBQztNQUVwRSxJQUFJLENBQUMwZ0IsS0FBSyxDQUFDNWdCLE1BQU0sSUFBSSxDQUFDNGdCLEtBQUssQ0FBQzNnQixLQUFLLEVBQUU7UUFDL0I2Z0IsT0FBTyxDQUFDeHlCLFNBQVMsQ0FBQ00sR0FBRyxDQUFDMHhCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQzRDLE9BQU8sQ0FBQ25nQixLQUFLLENBQUM7UUFDaEQ7UUFDQWloQixPQUFPLENBQUN4eUIsU0FBUyxDQUFDRSxNQUFNLENBQUM4eEIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDNEMsT0FBTyxDQUFDQyxPQUFPLENBQUM7UUFDckRXLEtBQUssQ0FBQy9nQixLQUFLLENBQUMsQ0FBQztNQUNqQjtJQUNKO0VBQUM7SUFBQXhQLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUEwd0IsVUFBVWpyQixJQUFJLEVBQUU7TUFDWixJQUFJdXFCLElBQUksR0FBRyxJQUFJO01BQ2YsSUFBSU0sS0FBSyxHQUFHN3FCLElBQUk7TUFDaEIsSUFBSThxQixjQUFjLEdBQUdELEtBQUssQ0FBQ3ByQixhQUFhO01BQ3hDLElBQUlzckIsT0FBTyxHQUFHRCxjQUFjLENBQUMxekIsYUFBYSxDQUFDbXpCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQzlYLE9BQU8sQ0FBQ3BGLElBQUksQ0FBQztNQUVwRSxJQUFJMGdCLEtBQUssQ0FBQzVnQixNQUFNLElBQUk0Z0IsS0FBSyxDQUFDM2dCLEtBQUssRUFBRTtRQUM3QjZnQixPQUFPLENBQUN4eUIsU0FBUyxDQUFDTSxHQUFHLENBQUMweEIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDNEMsT0FBTyxDQUFDQyxPQUFPLENBQUM7UUFDbEQ7QUFDWjtRQUNZYSxPQUFPLENBQUN4eUIsU0FBUyxDQUFDRSxNQUFNLENBQUM4eEIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDNEMsT0FBTyxDQUFDbmdCLEtBQUssQ0FBQztRQUNuRCtnQixLQUFLLENBQUMxZ0IsSUFBSSxDQUFDLENBQUM7TUFDaEI7SUFDSjtFQUFDO0FBQUE7QUFHTCwrREFBZStWLGlCQUFpQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2xLeUI7QUFDSjtBQUNMO0FBQ0E7QUFDVztBQUNYO0FBQ0Q7QUFDSztBQUFBLElBRTlDcEYsZUFBZTtFQUNqQixTQUFBQSxnQkFBWXRDLFFBQVEsRUFBRTtJQUFBemUsZUFBQSxPQUFBK2dCLGVBQUE7SUFDbEIsSUFBSSxDQUFDeVEsY0FBYyxHQUFHLENBRXRCLENBQUM7SUFDRCxJQUFJLENBQUNDLGFBQWEsR0FBRztNQUNqQkMsVUFBVSxFQUFFLG1CQUFtQjtNQUMvQnhULFVBQVUsRUFBRTtRQUNSamhCLEVBQUUsRUFBRSwyQkFBMkI7UUFDL0JraEIsU0FBUyxFQUFFO01BQ2Y7SUFDSixDQUFDO0lBQ0QsSUFBSSxDQUFDd1QsVUFBVSxHQUFHO01BQ2QvekIsSUFBSSxFQUFRLG9CQUFvQjtNQUNoQ3dnQixNQUFNLEVBQU0sV0FBVztNQUN2QjNSLE9BQU8sRUFBSztJQUNoQixDQUFDO0lBRUQsSUFBSSxDQUFDbWxCLFFBQVEsR0FBR25ULFFBQVEsQ0FBQzlaLE9BQU8sQ0FBQyxrQkFBa0IsRUFBQyxFQUFFLENBQUM7SUFDdkQsSUFBSSxDQUFDa3RCLFVBQVUsR0FBR3BULFFBQVE7SUFDMUIsSUFBSSxDQUFDcVQsZ0JBQWdCLEdBQUdyVCxRQUFRLENBQUM5WixPQUFPLENBQUMsa0JBQWtCLEVBQUMsb0JBQW9CLENBQUM7SUFFakYsSUFBSSxDQUFDb3RCLFNBQVMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDRixVQUFVO0lBQ3RDLElBQUksQ0FBQ0csZUFBZSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUNGLGdCQUFnQjtJQUNsRCxJQUFJLENBQUNILFVBQVUsQ0FBQ25kLE9BQU8sR0FBRyxJQUFJLENBQUN3ZCxlQUFlO0lBRTlDLElBQUksQ0FBQ0MsVUFBVSxHQUFHNzBCLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLElBQUksQ0FBQzAwQixTQUFTLENBQUM7SUFDeEQsSUFBSSxDQUFDRyxnQkFBZ0IsR0FBRzkwQixRQUFRLENBQUNDLGFBQWEsQ0FBQyxJQUFJLENBQUMyMEIsZUFBZSxDQUFDO0lBRXBFLElBQUksQ0FBQ0csVUFBVSxHQUFHblYsMkRBQVcsQ0FBQyxJQUFJLENBQUNpVixVQUFVLENBQUNwa0IsWUFBWSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFFcEYsSUFBSSxDQUFDdWtCLFFBQVEsR0FBRyxLQUFLO0lBQ3JCLElBQUksQ0FBQ0MsU0FBUyxHQUFHLEtBQUs7SUFFdEIsSUFBSSxDQUFDQyxlQUFlO0lBQ3BCLElBQUksQ0FBQ0MsY0FBYztJQUNuQixJQUFJLENBQUNDLFdBQVc7SUFFaEIsSUFBSSxDQUFDbnlCLElBQUksQ0FBQyxDQUFDO0VBQ2Y7RUFBQyxPQUFBQyxZQUFBLENBQUF5Z0IsZUFBQTtJQUFBeGdCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFILEtBQUEsRUFBTztNQUNILElBQUltd0IsSUFBSSxHQUFHLElBQUk7TUFDZixJQUFJOU8sWUFBWSxHQUFHaGlCLE1BQU0sQ0FBQ3VhLFVBQVU7TUFFcEN5SCxZQUFZLEdBQUcsSUFBSSxHQUFHOE8sSUFBSSxDQUFDNEIsUUFBUSxHQUFHLElBQUksR0FBRzVCLElBQUksQ0FBQzZCLFNBQVMsR0FBRyxJQUFJO01BRWxFN0IsSUFBSSxDQUFDaUMsWUFBWSxDQUFDLENBQUM7TUFFbkIsSUFBR2pDLElBQUksQ0FBQzRCLFFBQVEsSUFBSTVCLElBQUksQ0FBQzJCLFVBQVUsRUFBRTNCLElBQUksQ0FBQ2tDLFlBQVksQ0FBQyxDQUFDO01BQ3hELElBQUdsQyxJQUFJLENBQUM2QixTQUFTLEVBQUU3QixJQUFJLENBQUNtQyxhQUFhLENBQUMsQ0FBQztNQUV2Q2p6QixNQUFNLENBQUN0QixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsWUFBTTtRQUNwQ295QixJQUFJLENBQUNvQyxjQUFjLENBQUMsQ0FBQztNQUN6QixDQUFDLENBQUM7TUFFRnBDLElBQUksQ0FBQ29DLGNBQWMsR0FBRy9OLHlEQUFXLENBQUMsWUFBTTtRQUNwQzJMLElBQUksQ0FBQ3FDLFlBQVksQ0FBQyxDQUFDO01BQ3ZCLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDWDtFQUFDO0lBQUF0eUIsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQWl5QixhQUFBLEVBQWU7TUFDWCxJQUFJakMsSUFBSSxHQUFHLElBQUk7TUFFZixJQUFHQSxJQUFJLENBQUM0QixRQUFRLElBQUk1QixJQUFJLENBQUMyQixVQUFVLEVBQUU7UUFDakMsSUFBSVcsUUFBUSxHQUFHdEMsSUFBSSxDQUFDc0IsZ0JBQWdCO1FBQ3BDdEIsSUFBSSxDQUFDaUIsYUFBYSxHQUFHeFUsOERBQVEsQ0FBQ3VULElBQUksQ0FBQzBCLGdCQUFnQixFQUFFMUIsSUFBSSxDQUFDaUIsYUFBYSxDQUFDO1FBQ3hFakIsSUFBSSxDQUFDaUIsYUFBYSxHQUFHN1Usc0VBQVksQ0FBQzRULElBQUksQ0FBQzBCLGdCQUFnQixFQUFFMUIsSUFBSSxDQUFDaUIsYUFBYSxDQUFDO1FBQzVFakIsSUFBSSxDQUFDaUIsYUFBYSxHQUFHNVUsa0VBQVksQ0FBQzJULElBQUksQ0FBQzBCLGdCQUFnQixFQUFFMUIsSUFBSSxDQUFDaUIsYUFBYSxDQUFDOztRQUU1RTtRQUNBakIsSUFBSSxDQUFDaUIsYUFBYSxHQUFHMVUsMEVBQWMsQ0FBQ3lULElBQUksQ0FBQzBCLGdCQUFnQixFQUFFMUIsSUFBSSxDQUFDaUIsYUFBYSxFQUFFcUIsUUFBUSxFQUFFdEMsSUFBSSxDQUFDb0IsUUFBUSxDQUFDO01BQzNHO01BRUEsSUFBR3BCLElBQUksQ0FBQzZCLFNBQVMsRUFBRTtRQUNmLElBQUlTLFNBQVEsR0FBR3RDLElBQUksQ0FBQ3FCLFVBQVU7UUFDOUJyQixJQUFJLENBQUNnQixjQUFjLEdBQUd2VSw4REFBUSxDQUFDdVQsSUFBSSxDQUFDeUIsVUFBVSxFQUFFekIsSUFBSSxDQUFDZ0IsY0FBYyxDQUFDO1FBQ3BFaEIsSUFBSSxDQUFDZ0IsY0FBYyxHQUFHNVUsc0VBQVksQ0FBQzRULElBQUksQ0FBQ3lCLFVBQVUsRUFBRXpCLElBQUksQ0FBQ2dCLGNBQWMsQ0FBQztRQUN4RWhCLElBQUksQ0FBQ2dCLGNBQWMsR0FBRzNVLGtFQUFZLENBQUMyVCxJQUFJLENBQUN5QixVQUFVLEVBQUV6QixJQUFJLENBQUNnQixjQUFjLENBQUM7UUFDeEVoQixJQUFJLENBQUNnQixjQUFjLEdBQUdELG1FQUFVLENBQUNmLElBQUksQ0FBQ3lCLFVBQVUsRUFBRXpCLElBQUksQ0FBQ2dCLGNBQWMsQ0FBQzs7UUFFdEU7UUFDQWhCLElBQUksQ0FBQ2dCLGNBQWMsR0FBR3pVLDBFQUFjLENBQUN5VCxJQUFJLENBQUN5QixVQUFVLEVBQUV6QixJQUFJLENBQUNnQixjQUFjLEVBQUVzQixTQUFRLEVBQUV0QyxJQUFJLENBQUNvQixRQUFRLENBQUM7TUFFdkc7SUFDSjtFQUFDO0lBQUFyeEIsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQW15QixjQUFBLEVBQWdCO01BQ1osSUFBSW5DLElBQUksR0FBRyxJQUFJO01BQ2ZBLElBQUksQ0FBQzhCLGVBQWUsR0FBRyxJQUFJbGYsTUFBTSxDQUFDb2QsSUFBSSxDQUFDdUIsU0FBUyxFQUFFdkIsSUFBSSxDQUFDZ0IsY0FBYyxDQUFDO01BQ3RFLElBQUdoQixJQUFJLENBQUM4QixlQUFlLENBQUNyVCxXQUFXLEVBQUU7UUFDakN1UixJQUFJLENBQUNnQyxXQUFXLEdBQUcsSUFBSTdWLHlEQUFjLENBQUM2VCxJQUFJLENBQUM4QixlQUFlLEVBQUU5QixJQUFJLENBQUNtQixVQUFVLENBQUM7TUFDaEY7SUFDSjtFQUFDO0lBQUFweEIsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQWt5QixhQUFBLEVBQWU7TUFDWCxJQUFJbEMsSUFBSSxHQUFHLElBQUk7TUFDZkEsSUFBSSxDQUFDK0IsY0FBYyxHQUFHLElBQUluZixNQUFNLENBQUNvZCxJQUFJLENBQUN3QixlQUFlLEVBQUV4QixJQUFJLENBQUNpQixhQUFhLENBQUM7SUFDOUU7RUFBQztJQUFBbHhCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFxeUIsYUFBQSxFQUFlO01BQ1gsSUFBSXJDLElBQUksR0FBRyxJQUFJO01BQ2YsSUFBSTdNLFFBQVEsR0FBR2prQixNQUFNLENBQUN1YSxVQUFVO01BRWhDLElBQUcwSixRQUFRLEdBQUcsSUFBSSxFQUFFO1FBQ2hCLElBQUcsQ0FBQzZNLElBQUksQ0FBQzRCLFFBQVEsRUFBRTtVQUNmLElBQUcsT0FBTzVCLElBQUksQ0FBQzhCLGVBQWUsS0FBSyxXQUFXLEVBQUU7WUFDNUM5QixJQUFJLENBQUNnQyxXQUFXLENBQUNPLFVBQVUsQ0FBQyxDQUFDO1lBQzdCdkMsSUFBSSxDQUFDOEIsZUFBZSxDQUFDMVEsT0FBTyxDQUFDLENBQUM7WUFDOUI0TyxJQUFJLENBQUM4QixlQUFlLEdBQUcxcEIsU0FBUztVQUNwQztVQUVBLElBQUc0bkIsSUFBSSxDQUFDMkIsVUFBVSxFQUFFO1lBQ2hCM0IsSUFBSSxDQUFDa0MsWUFBWSxDQUFDLENBQUM7VUFDdkI7VUFDQWxDLElBQUksQ0FBQzZCLFNBQVMsR0FBRyxLQUFLO1VBQ3RCN0IsSUFBSSxDQUFDNEIsUUFBUSxHQUFHLElBQUk7UUFDeEI7TUFDSixDQUFDLE1BQ0k7UUFDRCxJQUFHLENBQUM1QixJQUFJLENBQUM2QixTQUFTLEVBQUU7VUFDaEIsSUFBRyxPQUFPN0IsSUFBSSxDQUFDK0IsY0FBYyxLQUFLLFdBQVcsRUFBRTtZQUMzQy9CLElBQUksQ0FBQytCLGNBQWMsQ0FBQzNRLE9BQU8sQ0FBQyxDQUFDO1lBQzdCNE8sSUFBSSxDQUFDK0IsY0FBYyxHQUFHM3BCLFNBQVM7VUFDbkM7VUFFQTRuQixJQUFJLENBQUNtQyxhQUFhLENBQUMsQ0FBQztVQUNwQm5DLElBQUksQ0FBQzRCLFFBQVEsR0FBRyxLQUFLO1VBQ3JCNUIsSUFBSSxDQUFDNkIsU0FBUyxHQUFHLElBQUk7UUFDekI7TUFDSjtJQUNKO0VBQUM7QUFBQTtBQUdMLCtEQUFldFIsZUFBZTs7Ozs7Ozs7Ozs7Ozs7QUMvSTlCO0FBQ0E7QUFDQTs7QUFFQSxJQUFNbkUsWUFBWSxHQUFHLFNBQWZBLFlBQVlBLENBQUkzVyxJQUFJLEVBQUVqQyxPQUFPLEVBQUs7RUFDcEMsSUFBRyxDQUFDaUMsSUFBSSxFQUFFLE9BQU9qQyxPQUFPO0VBRXhCLElBQUlndkIsVUFBVSxHQUFHL3NCLElBQUksQ0FBQzRILFlBQVksQ0FBQyxzQkFBc0IsQ0FBQztFQUMxRCxJQUFJb2xCLGVBQWUsR0FBR2h0QixJQUFJLENBQUM0SCxZQUFZLENBQUMsNEJBQTRCLENBQUM7RUFFckUsSUFBR21sQixVQUFVLEtBQUssTUFBTSxFQUFDO0lBQ3JCaHZCLE9BQU8sQ0FBQ3VMLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDckJ2TCxPQUFPLENBQUN1TCxRQUFRLENBQUNrRSxvQkFBb0IsR0FBRyxLQUFLO0lBQzdDelAsT0FBTyxDQUFDdUwsUUFBUSxDQUFDaUUsS0FBSyxHQUFHeWYsZUFBZSxHQUFHL3dCLFFBQVEsQ0FBQyt3QixlQUFlLENBQUMsR0FBRyxJQUFJO0VBQy9FO0VBRUEsT0FBT2p2QixPQUFPO0FBQ2xCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQ2pCRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFNOFksZUFBZSxHQUFHLFNBQWxCQSxlQUFlQSxDQUFJN1csSUFBSSxFQUFFakMsT0FBTyxFQUFLO0VBQ3pDLElBQUcsQ0FBQ2lDLElBQUksRUFBRSxPQUFPakMsT0FBTztFQUV4QixJQUFJa3ZCLFNBQVMsR0FBR2h4QixRQUFRLENBQUMrRCxJQUFJLENBQUM0SCxZQUFZLENBQUMscUJBQXFCLENBQUMsQ0FBQztFQUNsRSxJQUFJc2xCLFVBQVUsR0FBR2p4QixRQUFRLENBQUMrRCxJQUFJLENBQUM0SCxZQUFZLENBQUMseUJBQXlCLENBQUMsQ0FBQztFQUV2RSxJQUFHcWxCLFNBQVMsRUFBRTtJQUNabHZCLE9BQU8sQ0FBQ3FQLGFBQWEsR0FBRzZmLFNBQVM7SUFDakNsdkIsT0FBTyxDQUFDd1ksV0FBVyxHQUFHO01BQ3BCLEdBQUcsRUFBRTtRQUNIbkosYUFBYSxFQUFFNmYsU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNwQzNmLFlBQVksRUFBRTtNQUNoQixDQUFDO01BRUQsR0FBRyxFQUFFO1FBQ0hGLGFBQWEsRUFBRTZmLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDcEMzZixZQUFZLEVBQUU0ZixVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztNQUN2QyxDQUFDO01BRUQsSUFBSSxFQUFFO1FBQ0o5ZixhQUFhLEVBQUU2ZixTQUFTO1FBQ3hCM2YsWUFBWSxFQUFFNGYsVUFBVSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7TUFDdkMsQ0FBQztNQUNELElBQUksRUFBRTtRQUNKOWYsYUFBYSxFQUFFNmYsU0FBUztRQUN4QjNmLFlBQVksRUFBRTRmLFVBQVUsSUFBSTtNQUM5QjtJQUNGLENBQUM7RUFDSCxDQUFDLE1BQU07SUFDTG52QixPQUFPLENBQUN3WSxXQUFXLEdBQUc7TUFDcEIsR0FBRyxFQUFFO1FBQ0huSixhQUFhLEVBQUU7TUFDakIsQ0FBQztNQUNELEdBQUcsRUFBRTtRQUNIQSxhQUFhLEVBQUUsQ0FBQztRQUNoQkUsWUFBWSxFQUFFNGYsVUFBVSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7TUFDdkMsQ0FBQztNQUNELElBQUksRUFBRTtRQUNKOWYsYUFBYSxFQUFFLE1BQU07UUFDckJFLFlBQVksRUFBRTRmLFVBQVUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO01BQ3ZDO0lBQ0YsQ0FBQztFQUNIO0VBRUEsT0FBT252QixPQUFPO0FBQ2hCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQ3JERCxJQUFNdXRCLFVBQVUsR0FBRyxTQUFiQSxVQUFVQSxDQUFJdHJCLElBQUksRUFBRWpDLE9BQU8sRUFBSztFQUNsQyxJQUFJLENBQUNpQyxJQUFJLEVBQUUsT0FBT2pDLE9BQU87RUFFekIsSUFBTW92QixRQUFRLEdBQUdudEIsSUFBSSxDQUFDNEgsWUFBWSxDQUFDLCtCQUErQixDQUFDO0VBRW5FN0osT0FBTyxDQUFDZ2UsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUNuQixRQUFRb1IsUUFBUTtJQUVaLEtBQUssTUFBTTtNQUNQcHZCLE9BQU8sQ0FBQ2dlLE1BQU0sR0FBRyxNQUFNO01BQ3ZCaGUsT0FBTyxDQUFDcXZCLFVBQVUsR0FBRyxDQUFDLENBQUM7TUFDdkJydkIsT0FBTyxDQUFDcXZCLFVBQVUsQ0FBQ0MsU0FBUyxHQUFHLElBQUk7TUFDbkM7SUFDSixLQUFLLE1BQU07TUFDUHR2QixPQUFPLENBQUNnZSxNQUFNLEdBQUcsTUFBTTtNQUN2QjtJQUNKLEtBQUssV0FBVztNQUNaaGUsT0FBTyxDQUFDZ2UsTUFBTSxHQUFHLFdBQVc7TUFDNUI7SUFDSixLQUFLLE9BQU87TUFDUmhlLE9BQU8sQ0FBQ2dlLE1BQU0sR0FBRyxPQUFPO01BQ3hCO0lBQ0osS0FBSyxNQUFNO01BQ1BoZSxPQUFPLENBQUNnZSxNQUFNLEdBQUcsTUFBTTtNQUN2QjtFQUNSO0VBRUEsT0FBT2hlLE9BQU87QUFDbEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FDNUJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBTTZZLFlBQVksR0FBRyxTQUFmQSxZQUFZQSxDQUFJNVcsSUFBSSxFQUFFakMsT0FBTyxFQUFLO0VBQ3BDLElBQUcsQ0FBQ2lDLElBQUksRUFBRSxPQUFPakMsT0FBTzs7RUFFeEI7O0VBRUFBLE9BQU8sQ0FBQ3V2QixhQUFhLEdBQUcsS0FBSztFQUM3QnZ2QixPQUFPLENBQUN3dkIsSUFBSSxHQUFHLENBQUMsQ0FBQztFQUNqQnh2QixPQUFPLENBQUN3dkIsSUFBSSxDQUFDQyxZQUFZLEdBQUcsSUFBSTtFQUNoQ3p2QixPQUFPLENBQUMwdkIscUJBQXFCLEdBQUcsSUFBSTtFQUVwQyxPQUFPMXZCLE9BQU87QUFDbEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FDakJEO0FBQ0E7QUFDQTs7QUFFQSxJQUFNaVosUUFBUSxHQUFHLFNBQVhBLFFBQVFBLENBQUloWCxJQUFJLEVBQUVqQyxPQUFPLEVBQUs7RUFDaEMsSUFBRyxDQUFDaUMsSUFBSSxFQUFFLE9BQU9qQyxPQUFPO0VBRXhCLElBQUkydkIsTUFBTSxHQUFHMXRCLElBQUksQ0FBQzRILFlBQVksQ0FBQyxrQkFBa0IsQ0FBQztFQUVsRCxJQUFHOGxCLE1BQU0sS0FBSyxNQUFNLEVBQUM7SUFDakIzdkIsT0FBTyxDQUFDc1AsSUFBSSxHQUFHLElBQUk7SUFDbkJ0UCxPQUFPLENBQUMrWixjQUFjLEdBQUcsSUFBSTtFQUNqQztFQUVBLE9BQU8vWixPQUFPO0FBQ2xCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQ2ZEO0FBQ0E7QUFDQTs7QUFFQSxJQUFNK1ksY0FBYyxHQUFHLFNBQWpCQSxjQUFjQSxDQUFJOVcsSUFBSSxFQUFFakMsT0FBTyxFQUFFOHVCLFFBQVEsRUFBRWMsU0FBUyxFQUFLO0VBQzNELElBQUkvVCxNQUFNLEdBQUcscUJBQXFCO0VBQ2xDLElBQUlDLE1BQU0sR0FBRyxxQkFBcUI7RUFDbEMsSUFBSStULE1BQU0sRUFBRUMsTUFBTSxFQUFFQyxVQUFVLEVBQUVDLFVBQVU7RUFDMUMsSUFBRyxDQUFDL3RCLElBQUksRUFBRSxPQUFPakMsT0FBTztFQUV4QixJQUFJaXdCLFlBQVksR0FBR2h1QixJQUFJLENBQUM0SCxZQUFZLENBQUMsd0JBQXdCLENBQUM7RUFFOUQsSUFBR29tQixZQUFZLEVBQUU7SUFDYmp3QixPQUFPLENBQUM0YixVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBRXZCLElBQUdrVCxRQUFRLElBQUssT0FBT2MsU0FBUyxLQUFLLFdBQVksRUFBRTtNQUMvQ0MsTUFBTSxNQUFBMTFCLE1BQUEsQ0FBTTIwQixRQUFRLFlBQUEzMEIsTUFBQSxDQUFTeTFCLFNBQVMsQ0FBRTtNQUN4Q0UsTUFBTSxNQUFBMzFCLE1BQUEsQ0FBTTIwQixRQUFRLFlBQUEzMEIsTUFBQSxDQUFTeTFCLFNBQVMsQ0FBRTtJQUM1QztJQUVBLElBQUlsVixZQUFZLEdBQUd6WSxJQUFJLENBQUNxRyxPQUFPLENBQUMsV0FBVyxDQUFDO0lBQzVDLElBQUdvUyxZQUFZLEVBQUU7TUFDYnFWLFVBQVUsR0FBR3JWLFlBQVksQ0FBQ3JoQixhQUFhLENBQUN3aUIsTUFBTSxDQUFDO01BQy9DbVUsVUFBVSxHQUFHdFYsWUFBWSxDQUFDcmhCLGFBQWEsQ0FBQ3lpQixNQUFNLENBQUM7SUFDbkQ7SUFDQSxJQUFHaVUsVUFBVSxJQUFJRixNQUFNLEVBQUU7TUFDckJFLFVBQVUsQ0FBQ3hiLFlBQVksQ0FBQyxJQUFJLEVBQUVzYixNQUFNLENBQUM7TUFDckM3dkIsT0FBTyxDQUFDNGIsVUFBVSxDQUFDQyxNQUFNLE9BQUExaEIsTUFBQSxDQUFPMDFCLE1BQU0sQ0FBRTtJQUM1QztJQUNBLElBQUdHLFVBQVUsSUFBSUYsTUFBTSxFQUFFO01BQ3JCRSxVQUFVLENBQUN6YixZQUFZLENBQUMsSUFBSSxFQUFFdWIsTUFBTSxDQUFDO01BQ3JDOXZCLE9BQU8sQ0FBQzRiLFVBQVUsQ0FBQ0UsTUFBTSxPQUFBM2hCLE1BQUEsQ0FBTzIxQixNQUFNLENBQUU7SUFDNUM7RUFDSixDQUFDLE1BQ0k7SUFDRDl2QixPQUFPLENBQUM0YixVQUFVLEdBQUcsS0FBSztFQUM5QjtFQUVBLE9BQU81YixPQUFPO0FBQ2xCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQ3ZDRDtBQUNBO0FBQ0E7O0FBRUEsSUFBTWtaLHNCQUFzQixHQUFHLFNBQXpCQSxzQkFBc0JBLENBQUlqWCxJQUFJLEVBQUVqQyxPQUFPLEVBQUs7RUFDOUMsSUFBRyxDQUFDaUMsSUFBSSxFQUFFLE9BQU9qQyxPQUFPO0VBRXhCLElBQUlrd0Isa0JBQWtCLEdBQUdqdUIsSUFBSSxDQUFDNEgsWUFBWSxDQUFDLG9DQUFvQyxDQUFDO0VBRWhGLElBQUdxbUIsa0JBQWtCLEtBQUssTUFBTSxFQUFDO0lBQzdCbHdCLE9BQU8sQ0FBQ2t3QixrQkFBa0IsR0FBRyxJQUFJO0VBQ3JDO0VBRUEsT0FBT2x3QixPQUFPO0FBQ2xCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNkK0Q7QUFBQSxJQUUxRDJZLGNBQWM7RUFFaEIsU0FBQUEsZUFBWW9DLE1BQU0sRUFBRS9hLE9BQU8sRUFBRTtJQUFBaEUsZUFBQSxPQUFBMmMsY0FBQTtJQUN6QixJQUFJLENBQUNzUCxRQUFRLEdBQUc7TUFDWnpYLE9BQU8sRUFBRSxRQUFRO01BQ2pCNVcsSUFBSSxFQUFFLGNBQWM7TUFDcEJ3Z0IsTUFBTSxFQUFFLFdBQVc7TUFDbkIzUixPQUFPLEVBQUU7SUFDYixDQUFDO0lBQ0QsSUFBSSxDQUFDMm5CLE9BQU8sR0FBRyxLQUFLO0lBQ3BCO0lBQ0EsSUFBSSxDQUFDdmUsYUFBYSxDQUFDLENBQUM7O0lBRXBCO0lBQ0EsSUFBRyxDQUFDa0osTUFBTSxDQUFDRSxXQUFXLEVBQ3RCO01BQ0l0YixPQUFPLENBQUNDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQztNQUNyQztJQUNKO0lBRUEsSUFBSSxDQUFDbWIsTUFBTSxHQUFHQSxNQUFNO0lBRXBCLElBQUksQ0FBQ3VPLE1BQU0sR0FBR1gsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDWCxRQUFRLEVBQUVqb0IsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRTdELElBQUksQ0FBQ2tMLFFBQVEsTUFBQS9RLE1BQUEsQ0FBTSxJQUFJLENBQUNtdkIsTUFBTSxDQUFDOVksT0FBTyxPQUFBclcsTUFBQSxDQUFJLElBQUksQ0FBQ212QixNQUFNLENBQUMxdkIsSUFBSSxDQUFFO0lBQzVELElBQUksQ0FBQ2lqQixLQUFLLEdBQUd6akIsUUFBUSxDQUFDTSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUN3UixRQUFRLENBQUM7O0lBRXJEO0lBQ0EsSUFBSSxDQUFDbWxCLFVBQVUsR0FBRyxJQUFJLENBQUNDLFFBQVEsQ0FBQ25ILElBQUksQ0FBQyxJQUFJLENBQUM7SUFFMUMsSUFBSSxDQUFDOXNCLElBQUksQ0FBQyxDQUFDO0VBQ2Y7RUFBQyxPQUFBQyxZQUFBLENBQUFxYyxjQUFBO0lBQUFwYyxHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBSCxLQUFBLEVBQU87TUFDSCxJQUFNbXdCLElBQUksR0FBRyxJQUFJO01BQ2pCO01BQ0FBLElBQUksQ0FBQytELGlCQUFpQixDQUFDLENBQUM7TUFDeEI7TUFDQS9ELElBQUksQ0FBQ2dFLFFBQVEsQ0FBQyxDQUFDO0lBQ25CO0VBQUM7SUFBQWowQixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBZzBCLFNBQUEsRUFBVztNQUNQLElBQU1oRSxJQUFJLEdBQUcsSUFBSTtNQUNqQixJQUFNdnFCLElBQUksR0FBR3VxQixJQUFJLENBQUMzUCxLQUFLO01BRXZCNWEsSUFBSSxDQUFDdEksT0FBTyxDQUFDLFVBQUNxTyxHQUFHLEVBQUs7UUFDbEJBLEdBQUcsQ0FBQzVOLGdCQUFnQixDQUFDb3lCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQzdnQixPQUFPLEVBQUUrakIsSUFBSSxDQUFDNkQsVUFBVSxFQUFFO1VBQUVoTixPQUFPLEVBQUU7UUFBSyxDQUFDLENBQUM7UUFFN0UsSUFBR21KLElBQUksQ0FBQzRELE9BQU8sSUFBSTVELElBQUksQ0FBQ2xELE1BQU0sQ0FBQzdnQixPQUFPLEtBQUssV0FBVyxFQUFFO1VBQ3BEVCxHQUFHLENBQUM1TixnQkFBZ0IsQ0FBQyxZQUFZLEVBQUVveUIsSUFBSSxDQUFDNkQsVUFBVSxFQUFFO1lBQUVoTixPQUFPLEVBQUU7VUFBSyxDQUFDLENBQUM7UUFDMUU7TUFDSixDQUFDLENBQUM7SUFDTjtFQUFDO0lBQUE5bUIsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQXV5QixXQUFBLEVBQWE7TUFDVCxJQUFNdkMsSUFBSSxHQUFHLElBQUk7TUFDakIsSUFBTXZxQixJQUFJLEdBQUd1cUIsSUFBSSxDQUFDM1AsS0FBSztNQUV2QjVhLElBQUksQ0FBQ3RJLE9BQU8sQ0FBQyxVQUFDcU8sR0FBRyxFQUFLO1FBQ2xCQSxHQUFHLENBQUN5b0IsbUJBQW1CLENBQUNqRSxJQUFJLENBQUNsRCxNQUFNLENBQUM3Z0IsT0FBTyxFQUFFK2pCLElBQUksQ0FBQzZELFVBQVUsQ0FBQztRQUU3RCxJQUFHN0QsSUFBSSxDQUFDNEQsT0FBTyxJQUFJNUQsSUFBSSxDQUFDbEQsTUFBTSxDQUFDN2dCLE9BQU8sS0FBSyxXQUFXLEVBQUU7VUFDcERULEdBQUcsQ0FBQ3lvQixtQkFBbUIsQ0FBQyxZQUFZLEVBQUVqRSxJQUFJLENBQUM2RCxVQUFVLENBQUM7UUFDMUQ7TUFDSixDQUFDLENBQUM7SUFDTjtFQUFDO0lBQUE5ekIsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQTh6QixTQUFTNU8sRUFBRSxFQUFFO01BQ1QsSUFBTThLLElBQUksR0FBRyxJQUFJO01BQ2pCLElBQU1rRSxVQUFVLEdBQUdoUCxFQUFFLENBQUN5TCxhQUFhO01BQ25DLElBQU1sckIsSUFBSSxHQUFHdXFCLElBQUksQ0FBQzNQLEtBQUs7TUFFdkIsSUFBSThULFVBQVU7TUFDZDF1QixJQUFJLENBQUN0SSxPQUFPLENBQUMsVUFBQ3FPLEdBQUcsRUFBRXBDLENBQUMsRUFBSztRQUNyQixJQUFJOHFCLFVBQVUsS0FBSzFvQixHQUFHLEVBQUU7VUFDcEIyb0IsVUFBVSxHQUFHL3FCLENBQUM7UUFDbEI7UUFDQW9DLEdBQUcsQ0FBQ3hOLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDOHhCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ2xQLE1BQU0sQ0FBQztNQUM1QyxDQUFDLENBQUM7TUFFRnNXLFVBQVUsQ0FBQ2wyQixTQUFTLENBQUNNLEdBQUcsQ0FBQzB4QixJQUFJLENBQUNsRCxNQUFNLENBQUNsUCxNQUFNLENBQUM7TUFDNUNvUyxJQUFJLENBQUN6UixNQUFNLENBQUNnQixPQUFPLENBQUM0VSxVQUFVLENBQUM7SUFDbkM7RUFBQztJQUFBcDBCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFvMEIsVUFBVS8yQixLQUFLLEVBQUU7TUFDYixJQUFNMnlCLElBQUksR0FBRyxJQUFJO01BQ2pCLElBQU12cUIsSUFBSSxHQUFHdXFCLElBQUksQ0FBQzNQLEtBQUs7TUFDdkI1YSxJQUFJLENBQUN0SSxPQUFPLENBQUMsVUFBQ3FPLEdBQUcsRUFBSztRQUNsQkEsR0FBRyxDQUFDeE4sU0FBUyxDQUFDRSxNQUFNLENBQUM4eEIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDbFAsTUFBTSxDQUFDO01BQzVDLENBQUMsQ0FBQztNQUVGblksSUFBSSxDQUFDdEksT0FBTyxDQUFDLFVBQUNxTyxHQUFHLEVBQUVwQyxDQUFDLEVBQUs7UUFDckIsSUFBSS9MLEtBQUssS0FBSytMLENBQUMsRUFBRTtVQUNib0MsR0FBRyxDQUFDeE4sU0FBUyxDQUFDTSxHQUFHLENBQUMweEIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDbFAsTUFBTSxDQUFDO1FBQ3pDO01BQ0osQ0FBQyxDQUFDO0lBRU47RUFBQztJQUFBN2QsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQXFWLGNBQUEsRUFBZ0I7TUFDWixJQUFJMmEsSUFBSSxHQUFHLElBQUk7TUFDZixJQUFHMkQseUVBQWUsQ0FBQyxDQUFDLEVBQ3BCO1FBQ0kzRCxJQUFJLENBQUM0RCxPQUFPLEdBQUcsSUFBSTtNQUN2QjtJQUNKO0VBQUM7SUFBQTd6QixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBK3pCLGtCQUFBLEVBQW9CO01BQ2hCLElBQUkvRCxJQUFJLEdBQUcsSUFBSTtNQUVmQSxJQUFJLENBQUN6UixNQUFNLENBQUMxWixFQUFFLENBQUMsYUFBYSxFQUFFLFlBQU07UUFDaEMsSUFBTTVILFlBQVksR0FBRyt5QixJQUFJLENBQUN6UixNQUFNLENBQUNLLFdBQVc7UUFDNUNvUixJQUFJLENBQUNvRSxTQUFTLENBQUNuM0IsWUFBWSxDQUFDO01BQ2hDLENBQUMsQ0FBQztJQUNOO0VBQUM7QUFBQTtBQUdMLCtEQUFla2YsY0FBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2SGdDO0FBQ1E7QUFDTDtBQUNkO0FBQ0s7QUFDQTtBQUFBLElBRWpEbEMsY0FBYztFQUNoQixTQUFBQSxlQUFZdkwsUUFBUSxFQUFFbEwsT0FBTyxFQUFFO0lBQUFoRSxlQUFBLE9BQUF5YSxjQUFBO0lBQzNCO0lBQ0EsSUFBSSxDQUFDcVYsT0FBTyxHQUFHLGlCQUFpQjtJQUVoQyxJQUFJLENBQUM3RCxRQUFRLEdBQUc7TUFDWjhJLFNBQVMsRUFBRTtRQUNQbjNCLElBQUksRUFBRSxjQUFjO1FBQ3BCNk8sT0FBTyxFQUFFLGdCQUFnQjtRQUN6QjZJLE9BQU8sRUFBRTtNQUNiLENBQUM7TUFDRDBmLE9BQU8sRUFBRTtRQUNMQyxTQUFTLEVBQUUsaUJBQWlCO1FBQzVCcjNCLElBQUksRUFBRTtNQUNWLENBQUM7TUFDRHN5QixPQUFPLEVBQUU7UUFDTDlSLE1BQU0sRUFBRSxXQUFXO1FBQ25CM0YsS0FBSyxFQUFFLE9BQU87UUFDZG9MLE9BQU8sRUFBRTtNQUNiLENBQUM7TUFDRHFSLFNBQVMsRUFBRTtRQUNQNWYsT0FBTyxFQUFFLElBQUk7UUFBRTtRQUNmMGYsT0FBTyxFQUFFLEtBQUssQ0FBRTtNQUNwQixDQUFDO01BQ0R6cUIsSUFBSSxFQUFFO1FBQ0YwbEIsS0FBSyxFQUFFLFlBQVk7UUFDbkJqaUIsSUFBSSxFQUFFLGFBQWE7UUFDbkJnbkIsT0FBTyxFQUFFLGNBQWM7UUFDdkJHLFdBQVcsRUFBRSxtQkFBbUI7UUFDaENDLGdCQUFnQixFQUFFLGdCQUFnQjtRQUNsQ0MsZ0JBQWdCLEVBQUUsd0JBQXdCO1FBQzFDeFIsT0FBTyxFQUFFLGtCQUFrQjtRQUMzQnlSLFlBQVksRUFBRTtNQUNsQixDQUFDO01BQ0RDLEdBQUcsRUFBRTtRQUNEdEYsS0FBSyxFQUFFLEtBQUs7UUFDWnVGLE1BQU0sRUFBRSxLQUFLO1FBQ2JDLFVBQVUsRUFBRSxLQUFLO1FBQ2pCTixXQUFXLEVBQUUsS0FBSztRQUNsQkcsWUFBWSxFQUFFO01BQ2xCLENBQUM7TUFDREksSUFBSSxFQUFFO1FBQ0YzbkIsTUFBTSxFQUFFLFFBQVE7UUFDaEJ1SCxPQUFPLEVBQUU7TUFDYjtJQUNKLENBQUM7SUFFRCxJQUFJLENBQUNnWSxNQUFNLEdBQUd1QyxzRUFBYyxDQUFDLElBQUksQ0FBQzVELFFBQVEsRUFBRWpvQixPQUFRLENBQUM7SUFDckQ7SUFDQSxJQUFJLE9BQU9rTCxRQUFRLEtBQUssV0FBVyxFQUFFO01BQ2pDLElBQUksQ0FBQzRnQixPQUFPLEdBQUc1Z0IsUUFBUTtJQUMzQjs7SUFFQTtJQUNBLElBQUksQ0FBQ3ltQixXQUFXLENBQUMsQ0FBQztJQUVsQixJQUFJLENBQUN6bUIsUUFBUSxHQUFHOVIsUUFBUSxDQUFDQyxhQUFhLENBQUMsSUFBSSxDQUFDeXlCLE9BQU8sQ0FBQztJQUVwRCxJQUFJLENBQUM4RixlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBRXpCLElBQUksQ0FBQ25ELFlBQVksQ0FBQyxDQUFDO0lBRW5CLElBQUksQ0FBQ2htQixPQUFPLEdBQUcsSUFBSSxDQUFDeUMsUUFBUSxDQUFDeFIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDNHZCLE1BQU0sQ0FBQ3lILFNBQVMsQ0FBQ3RvQixPQUFPLENBQUM7SUFDNUUsSUFBSSxDQUFDb1UsS0FBSyxHQUFHLElBQUksQ0FBQzNSLFFBQVEsQ0FBQ3hSLGdCQUFnQixDQUFDLElBQUksQ0FBQzR2QixNQUFNLENBQUN5SCxTQUFTLENBQUNuM0IsSUFBSSxDQUFDO0lBRXZFLElBQUksSUFBSSxDQUFDMHZCLE1BQU0sQ0FBQ2lJLEdBQUcsQ0FBQ0UsVUFBVSxFQUFFO01BQzVCLElBQUksQ0FBQ0ksWUFBWSxHQUFHLElBQUksQ0FBQzNtQixRQUFRLENBQUN4UixnQkFBZ0IsQ0FBQyxJQUFJLENBQUM0dkIsTUFBTSxDQUFDMEgsT0FBTyxDQUFDcDNCLElBQUksQ0FBQztJQUNoRjs7SUFFQTtJQUNBLElBQUksQ0FBQ2s0QixRQUFRLEdBQUcsRUFBRTtJQUVsQixJQUFJLENBQUNDLGFBQWEsR0FBRyxDQUFDO0lBQ3RCLElBQUksQ0FBQ0MsWUFBWSxHQUFHLENBQUM7SUFFckIsSUFBSSxDQUFDMzFCLElBQUksQ0FBQyxDQUFDO0VBQ2Y7RUFBQyxPQUFBQyxZQUFBLENBQUFtYSxjQUFBO0lBQUFsYSxHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBSCxLQUFBLEVBQU87TUFDSCxJQUFJLENBQUM0MUIsT0FBTyxDQUFDLENBQUM7TUFDZCxJQUFJLENBQUNDLG1CQUFtQixDQUFDLENBQUM7TUFDMUIsSUFBSSxDQUFDQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzlCO0VBQUM7SUFBQTUxQixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBNkUsR0FBRyt3QixNQUFNLEVBQUUxTCxRQUFRLEVBQUU7TUFDakIsSUFBTThGLElBQUksR0FBRyxJQUFJO01BQ2pCLElBQUksT0FBTzlGLFFBQVEsS0FBSyxVQUFVLEVBQUU7TUFFcEMwTCxNQUFNLENBQUMxMEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDL0QsT0FBTyxDQUFDLFVBQUNVLEtBQUssRUFBRXVMLENBQUMsRUFBSztRQUNwQyxJQUFJLENBQUM0bUIsSUFBSSxDQUFDb0YsZUFBZSxDQUFDdjNCLEtBQUssQ0FBQyxFQUFFbXlCLElBQUksQ0FBQ29GLGVBQWUsQ0FBQ3YzQixLQUFLLENBQUMsR0FBRyxFQUFFO1FBQ2xFbXlCLElBQUksQ0FBQ29GLGVBQWUsQ0FBQ3YzQixLQUFLLENBQUMsQ0FBQzRHLElBQUksQ0FBQ3lsQixRQUFRLENBQUM7TUFDOUMsQ0FBQyxDQUFDO0lBQ047RUFBQztJQUFBbnFCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUE2MUIsSUFBSUQsTUFBTSxFQUFFRSxPQUFPLEVBQUU7TUFDakIsSUFBTTlGLElBQUksR0FBRyxJQUFJO01BQ2pCLElBQUksQ0FBQ0EsSUFBSSxDQUFDb0YsZUFBZSxFQUFFO01BQzNCUSxNQUFNLENBQUMxMEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDL0QsT0FBTyxDQUFDLFVBQUNVLEtBQUssRUFBSztRQUNqQyxJQUFJLE9BQU9pNEIsT0FBTyxLQUFLLFdBQVcsRUFBRTtVQUNoQzlGLElBQUksQ0FBQ29GLGVBQWUsQ0FBQ3YzQixLQUFLLENBQUMsR0FBRyxFQUFFO1FBQ3BDLENBQUMsTUFBTSxJQUFJbXlCLElBQUksQ0FBQ29GLGVBQWUsQ0FBQ3YzQixLQUFLLENBQUMsRUFBRTtVQUNwQ215QixJQUFJLENBQUNvRixlQUFlLENBQUN2M0IsS0FBSyxDQUFDLENBQUNWLE9BQU8sQ0FBQyxVQUFDNDRCLFlBQVksRUFBRTE0QixLQUFLLEVBQUs7WUFDekQsSUFBSTA0QixZQUFZLEtBQUtELE9BQU8sRUFBRTtjQUMxQjlGLElBQUksQ0FBQ29GLGVBQWUsQ0FBQ3YzQixLQUFLLENBQUMsQ0FBQ200QixNQUFNLENBQUMzNEIsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNoRDtVQUNKLENBQUMsQ0FBQztRQUNOO01BQ0osQ0FBQyxDQUFDO0lBQ047RUFBQztJQUFBMEMsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQWkyQixLQUFBLEVBQWM7TUFDVixJQUFNakcsSUFBSSxHQUFHLElBQUk7TUFFakIsSUFBSSxDQUFDQSxJQUFJLENBQUNvRixlQUFlLEVBQUUsT0FBT3BGLElBQUk7TUFDdEMsSUFBSTRGLE1BQU07TUFDVixJQUFJbnVCLElBQUk7TUFDUixJQUFJeXVCLE9BQU87TUFBQyxTQUFBQyxJQUFBLEdBQUFodUIsU0FBQSxDQUFBbE0sTUFBQSxFQU5SbTZCLElBQUksT0FBQXZTLEtBQUEsQ0FBQXNTLElBQUEsR0FBQUUsSUFBQSxNQUFBQSxJQUFBLEdBQUFGLElBQUEsRUFBQUUsSUFBQTtRQUFKRCxJQUFJLENBQUFDLElBQUEsSUFBQWx1QixTQUFBLENBQUFrdUIsSUFBQTtNQUFBO01BUVIsSUFBSSxPQUFPRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxJQUFJdlMsS0FBSyxDQUFDeVMsT0FBTyxDQUFDRixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN2RFIsTUFBTSxHQUFHUSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hCM3VCLElBQUksR0FBRzJ1QixJQUFJLENBQUNyUyxLQUFLLENBQUMsQ0FBQyxFQUFFcVMsSUFBSSxDQUFDbjZCLE1BQU0sQ0FBQztRQUNqQ2k2QixPQUFPLEdBQUdsRyxJQUFJO01BQ2xCLENBQUMsTUFBTTtRQUNINEYsTUFBTSxHQUFHUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNSLE1BQU07UUFDdkJudUIsSUFBSSxHQUFHMnVCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzN1QixJQUFJO1FBQ25CeXVCLE9BQU8sR0FBR0UsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDRixPQUFPLElBQUlsRyxJQUFJO01BQ3JDOztNQUVBO01BQ0F2b0IsSUFBSSxDQUFDOHVCLE9BQU8sQ0FBQ0wsT0FBTyxDQUFDO01BQ3JCLElBQU1NLFdBQVcsR0FBRzNTLEtBQUssQ0FBQ3lTLE9BQU8sQ0FBQ1YsTUFBTSxDQUFDLEdBQUdBLE1BQU0sR0FBR0EsTUFBTSxDQUFDMTBCLEtBQUssQ0FBQyxHQUFHLENBQUM7TUFFdEVzMUIsV0FBVyxDQUFDcjVCLE9BQU8sQ0FBQyxVQUFDVSxLQUFLLEVBQUs7UUFDM0IsSUFBSW15QixJQUFJLENBQUNvRixlQUFlLElBQUlwRixJQUFJLENBQUNvRixlQUFlLENBQUN2M0IsS0FBSyxDQUFDLEVBQUU7VUFDckRteUIsSUFBSSxDQUFDb0YsZUFBZSxDQUFDdjNCLEtBQUssQ0FBQyxDQUFDVixPQUFPLENBQUMsVUFBQzQ0QixZQUFZLEVBQUs7WUFDbERBLFlBQVksQ0FBQ1UsS0FBSyxDQUFDUCxPQUFPLEVBQUV6dUIsSUFBSSxDQUFDO1VBQ3JDLENBQUMsQ0FBQztRQUNOO01BQ0osQ0FBQyxDQUFDO0lBQ047RUFBQztJQUFBMUgsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQTIxQixvQkFBQSxFQUFzQjtNQUNsQixJQUFJM0YsSUFBSSxHQUFHLElBQUk7TUFDZixJQUFJdnFCLElBQUksR0FBR3VxQixJQUFJLENBQUMvakIsT0FBTztNQUV2QitqQixJQUFJLENBQUMwRyxnQkFBZ0IsR0FBRzFHLElBQUksQ0FBQzBHLGdCQUFnQixDQUFDL0osSUFBSSxDQUFDcUQsSUFBSSxDQUFDO01BQ3hEQSxJQUFJLENBQUMyRyxlQUFlLEdBQUczRyxJQUFJLENBQUMyRyxlQUFlLENBQUNoSyxJQUFJLENBQUNxRCxJQUFJLENBQUM7TUFDdERBLElBQUksQ0FBQzRHLGNBQWMsR0FBRzVHLElBQUksQ0FBQzRHLGNBQWMsQ0FBQ2pLLElBQUksQ0FBQ3FELElBQUksQ0FBQztNQUVwREEsSUFBSSxDQUFDbnJCLEVBQUUsR0FBR21yQixJQUFJLENBQUNuckIsRUFBRSxDQUFDOG5CLElBQUksQ0FBQ3FELElBQUksQ0FBQztNQUM1QkEsSUFBSSxDQUFDNkYsR0FBRyxHQUFHN0YsSUFBSSxDQUFDNkYsR0FBRyxDQUFDbEosSUFBSSxDQUFDcUQsSUFBSSxDQUFDO01BQzlCQSxJQUFJLENBQUNpRyxJQUFJLEdBQUdqRyxJQUFJLENBQUNpRyxJQUFJLENBQUN0SixJQUFJLENBQUNxRCxJQUFJLENBQUM7TUFFaEN2cUIsSUFBSSxDQUFDdEksT0FBTyxDQUFDLFVBQUNvZCxHQUFHLEVBQUVuUixDQUFDLEVBQUs7UUFDckIsSUFBSXl0QixXQUFXLEdBQUc3RyxJQUFJLENBQUM4RyxpQkFBaUIsQ0FBQ25LLElBQUksQ0FBQ3FELElBQUksRUFBRTVtQixDQUFDLENBQUM7UUFDdEQ0bUIsSUFBSSxDQUFDc0YsUUFBUSxDQUFDN3dCLElBQUksQ0FBQ295QixXQUFXLENBQUM7UUFDL0J0YyxHQUFHLENBQUMzYyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUVpNUIsV0FBVyxFQUFFO1VBQUVoUSxPQUFPLEVBQUU7UUFBSyxDQUFDLENBQUM7UUFDN0R0TSxHQUFHLENBQUMzYyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUVveUIsSUFBSSxDQUFDMEcsZ0JBQWdCLEVBQUU7VUFBRTdQLE9BQU8sRUFBRTtRQUFLLENBQUMsQ0FBQztRQUN2RXRNLEdBQUcsQ0FBQzNjLGdCQUFnQixDQUFDLE1BQU0sRUFBRW95QixJQUFJLENBQUMyRyxlQUFlLEVBQUU7VUFBRTlQLE9BQU8sRUFBRTtRQUFLLENBQUMsQ0FBQztNQUN6RSxDQUFDLENBQUM7TUFFRixJQUFJa1EsU0FBUyxHQUFHL0csSUFBSSxDQUFDdGhCLFFBQVE7TUFDN0Jxb0IsU0FBUyxDQUFDbjVCLGdCQUFnQixDQUFDLFNBQVMsRUFBRW95QixJQUFJLENBQUM0RyxjQUFjLEVBQUU7UUFBRS9QLE9BQU8sRUFBRTtNQUFLLENBQUMsQ0FBQztJQUNqRjtFQUFDO0lBQUE5bUIsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQWczQixzQkFBQSxFQUF3QjtNQUNwQixJQUFNaEgsSUFBSSxHQUFHLElBQUk7TUFDakIsSUFBTXZxQixJQUFJLEdBQUd1cUIsSUFBSSxDQUFDL2pCLE9BQU87TUFFekJ4RyxJQUFJLENBQUN0SSxPQUFPLENBQUMsVUFBQ29kLEdBQUcsRUFBRW5SLENBQUMsRUFBSztRQUNyQixJQUFJNnRCLFVBQVUsR0FBRzFjLEdBQUcsQ0FBQ3pPLE9BQU8sQ0FBQ2trQixJQUFJLENBQUNsRCxNQUFNLENBQUN5SCxTQUFTLENBQUNuM0IsSUFBSSxDQUFDO1FBQ3hELElBQUk4NUIsV0FBVyxHQUFHRCxVQUFVLENBQUNwNkIsYUFBYSxDQUFDbXpCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ3lILFNBQVMsQ0FBQ3pmLE9BQU8sQ0FBQztRQUV6RSxJQUFJZ04sT0FBTyxFQUFFcVYsTUFBTTtRQUNuQixJQUFHbkgsSUFBSSxDQUFDbEQsTUFBTSxDQUFDb0ksSUFBSSxDQUFDejBCLElBQUksRUFBRTtVQUN0QnFoQixPQUFPLE1BQUFua0IsTUFBQSxDQUFNcXlCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ29JLElBQUksQ0FBQ3owQixJQUFJLE9BQUE5QyxNQUFBLENBQUlxeUIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDb0ksSUFBSSxDQUFDcGdCLE9BQU8sT0FBQW5YLE1BQUEsQ0FBSXlMLENBQUMsQ0FBRTtVQUNyRSt0QixNQUFNLE1BQUF4NUIsTUFBQSxDQUFNcXlCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ29JLElBQUksQ0FBQ3owQixJQUFJLE9BQUE5QyxNQUFBLENBQUlxeUIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDb0ksSUFBSSxDQUFDM25CLE1BQU0sT0FBQTVQLE1BQUEsQ0FBSXlMLENBQUMsQ0FBRTtRQUN2RTtRQUVBbVIsR0FBRyxDQUFDdkMsZUFBZSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7UUFDeENrZixXQUFXLENBQUNsZixlQUFlLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztRQUU5QyxJQUFHZ1ksSUFBSSxDQUFDbEQsTUFBTSxDQUFDb0ksSUFBSSxDQUFDejBCLElBQUksRUFBRTtVQUN0QjhaLEdBQUcsQ0FBQ3ZDLGVBQWUsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO1VBQ3hDdUMsR0FBRyxDQUFDdkMsZUFBZSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7VUFDN0JrZixXQUFXLENBQUNsZixlQUFlLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztVQUNyQ2tmLFdBQVcsQ0FBQ2xmLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7UUFDdEQ7UUFFQWtmLFdBQVcsQ0FBQ2xmLGVBQWUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ3ZDdUMsR0FBRyxDQUFDMFosbUJBQW1CLENBQUMsT0FBTyxFQUFFakUsSUFBSSxDQUFDc0YsUUFBUSxDQUFDbHNCLENBQUMsQ0FBQyxDQUFDO1FBQ2xEbVIsR0FBRyxDQUFDMFosbUJBQW1CLENBQUMsT0FBTyxFQUFFakUsSUFBSSxDQUFDMEcsZ0JBQWdCLENBQUM7UUFDdkRuYyxHQUFHLENBQUMwWixtQkFBbUIsQ0FBQyxNQUFNLEVBQUVqRSxJQUFJLENBQUMyRyxlQUFlLENBQUM7TUFDekQsQ0FBQyxDQUFDO01BRUYsSUFBSUksU0FBUyxHQUFHL0csSUFBSSxDQUFDdGhCLFFBQVE7TUFDN0Jxb0IsU0FBUyxDQUFDOUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFakUsSUFBSSxDQUFDNEcsY0FBYyxDQUFDO01BQzdENUcsSUFBSSxDQUFDb0gsWUFBWSxDQUFDLENBQUM7SUFDdkI7RUFBQztJQUFBcjNCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUE4MkIsa0JBQWtCMXRCLENBQUMsRUFBRThiLEVBQUUsRUFBRTtNQUNyQixJQUFJOEssSUFBSSxHQUFHLElBQUk7TUFFZixJQUFJcUgsa0JBQWtCLEdBQUduUyxFQUFFLENBQUN5TCxhQUFhO01BRXpDWCxJQUFJLENBQUNzSCxzQkFBc0IsQ0FBQ2x1QixDQUFDLEVBQUVpdUIsa0JBQWtCLEVBQUVuUyxFQUFFLENBQUM7SUFFMUQ7RUFBQztJQUFBbmxCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFzM0IsdUJBQXVCbHVCLENBQUMsRUFBRTNELElBQUksRUFBRXlmLEVBQUUsRUFBRTtNQUNoQyxJQUFJOEssSUFBSSxHQUFHLElBQUk7TUFFZixJQUFJcUgsa0JBQWtCLEdBQUc1eEIsSUFBSTtNQUM3QixJQUFJOHhCLEtBQUssR0FBR3ZILElBQUksQ0FBQzNQLEtBQUs7TUFFdEIsSUFBSW1YLFdBQVcsR0FBR0gsa0JBQWtCLENBQUN2ckIsT0FBTyxDQUFDa2tCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ3lILFNBQVMsQ0FBQ24zQixJQUFJLENBQUM7TUFDeEUsSUFBSXE2QixrQkFBa0IsR0FBR0QsV0FBVyxDQUFDMzZCLGFBQWEsQ0FBQ216QixJQUFJLENBQUNsRCxNQUFNLENBQUN5SCxTQUFTLENBQUN6ZixPQUFPLENBQUM7TUFDakYsSUFBSTRpQixRQUFRLEdBQUdMLGtCQUFrQixDQUFDaHFCLFlBQVksQ0FBQyxlQUFlLENBQUMsS0FBSyxNQUFNLElBQUksS0FBSztNQUVuRixJQUFHbXFCLFdBQVcsQ0FBQ3g1QixTQUFTLENBQUNDLFFBQVEsQ0FBQyt4QixJQUFJLENBQUNsRCxNQUFNLENBQUM0QyxPQUFPLENBQUM5UixNQUFNLENBQUMsRUFBRTtRQUMzRCxJQUFHb1MsSUFBSSxDQUFDbEQsTUFBTSxDQUFDaUksR0FBRyxDQUFDdEYsS0FBSyxFQUFFO1VBQ3RCLElBQUdPLElBQUksQ0FBQ2xELE1BQU0sQ0FBQzRILFNBQVMsQ0FBQzVmLE9BQU8sRUFBRTtZQUM5QmdRLGlFQUFTLENBQUMyUyxrQkFBa0IsRUFBRTtjQUMxQnBVLE9BQU8sRUFBRTJNLElBQUksQ0FBQ2xELE1BQU0sQ0FBQzRDLE9BQU8sQ0FBQ3JNO1lBQ2pDLENBQUMsQ0FBQztVQUNOO1VBQ0FtVSxXQUFXLENBQUN4NUIsU0FBUyxDQUFDRSxNQUFNLENBQUM4eEIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDNEMsT0FBTyxDQUFDOVIsTUFBTSxDQUFDO1VBQ3hEeVosa0JBQWtCLENBQUN0ZixZQUFZLENBQUMsZUFBZSxFQUFFLENBQUMyZixRQUFRLENBQUM7VUFDM0RELGtCQUFrQixDQUFDMWYsWUFBWSxDQUFDLGFBQWEsRUFBRTJmLFFBQVEsQ0FBQztRQUM1RDtNQUNKLENBQUMsTUFDSTtRQUNELElBQUcsQ0FBQzFILElBQUksQ0FBQ2xELE1BQU0sQ0FBQ2lJLEdBQUcsQ0FBQ0MsTUFBTSxFQUFFO1VBQ3hCdUMsS0FBSyxDQUFDcDZCLE9BQU8sQ0FBQyxVQUFDQyxJQUFJLEVBQUs7WUFDcEIsSUFBSXU2QixXQUFXLEdBQUd2NkIsSUFBSSxDQUFDUCxhQUFhLENBQUNtekIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDeUgsU0FBUyxDQUFDemYsT0FBTyxDQUFDO1lBQ25FLElBQUk4aUIsV0FBVyxHQUFHeDZCLElBQUksQ0FBQ1AsYUFBYSxDQUFDbXpCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ3lILFNBQVMsQ0FBQ3RvQixPQUFPLENBQUM7WUFDbkUsSUFBRytqQixJQUFJLENBQUNsRCxNQUFNLENBQUM0SCxTQUFTLENBQUM1ZixPQUFPLEVBQUU7Y0FFOUJnUSxpRUFBUyxDQUFDNlMsV0FBVyxFQUFFO2dCQUNuQnRVLE9BQU8sRUFBRTJNLElBQUksQ0FBQ2xELE1BQU0sQ0FBQzRDLE9BQU8sQ0FBQ3JNO2NBQ2pDLENBQUMsQ0FBQztZQUNOO1lBQ0FqbUIsSUFBSSxDQUFDWSxTQUFTLENBQUNFLE1BQU0sQ0FBQzh4QixJQUFJLENBQUNsRCxNQUFNLENBQUM0QyxPQUFPLENBQUM5UixNQUFNLENBQUM7WUFDakRnYSxXQUFXLENBQUM3ZixZQUFZLENBQUMsZUFBZSxFQUFFMmYsUUFBUSxDQUFDO1lBQ25EQyxXQUFXLENBQUM1ZixZQUFZLENBQUMsYUFBYSxFQUFFLENBQUMyZixRQUFRLENBQUM7VUFDdEQsQ0FBQyxDQUFDO1VBRUYsSUFBRzFILElBQUksQ0FBQ2xELE1BQU0sQ0FBQzRILFNBQVMsQ0FBQzVmLE9BQU8sRUFBRTtZQUM5QitQLG1FQUFXLENBQUM0UyxrQkFBa0IsRUFBRTtjQUM1QnBVLE9BQU8sRUFBRTJNLElBQUksQ0FBQ2xELE1BQU0sQ0FBQzRDLE9BQU8sQ0FBQ3JNO1lBQ2pDLENBQUMsQ0FBQztVQUNOO1VBRUFtVSxXQUFXLENBQUN4NUIsU0FBUyxDQUFDTSxHQUFHLENBQUMweEIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDNEMsT0FBTyxDQUFDOVIsTUFBTSxDQUFDO1VBQ3JEeVosa0JBQWtCLENBQUN0ZixZQUFZLENBQUMsZUFBZSxFQUFFLENBQUMyZixRQUFRLENBQUM7VUFDM0RELGtCQUFrQixDQUFDMWYsWUFBWSxDQUFDLGFBQWEsRUFBRTJmLFFBQVEsQ0FBQztRQUM1RCxDQUFDLE1BQ0k7VUFDRCxJQUFHMUgsSUFBSSxDQUFDbEQsTUFBTSxDQUFDNEgsU0FBUyxDQUFDNWYsT0FBTyxFQUFFO1lBQzlCK1AsbUVBQVcsQ0FBQzRTLGtCQUFrQixFQUFFO2NBQzVCcFUsT0FBTyxFQUFFMk0sSUFBSSxDQUFDbEQsTUFBTSxDQUFDNEMsT0FBTyxDQUFDck07WUFDakMsQ0FBQyxDQUFDO1VBQ047VUFDQW1VLFdBQVcsQ0FBQ3g1QixTQUFTLENBQUNNLEdBQUcsQ0FBQzB4QixJQUFJLENBQUNsRCxNQUFNLENBQUM0QyxPQUFPLENBQUM5UixNQUFNLENBQUM7VUFDckR5WixrQkFBa0IsQ0FBQ3RmLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQzJmLFFBQVEsQ0FBQztVQUMzREQsa0JBQWtCLENBQUMxZixZQUFZLENBQUMsYUFBYSxFQUFFMmYsUUFBUSxDQUFDO1FBQzVEO1FBRUEsSUFBSTFILElBQUksQ0FBQ2xELE1BQU0sQ0FBQ2lJLEdBQUcsQ0FBQ0UsVUFBVSxFQUFFO1VBQzVCakYsSUFBSSxDQUFDNkgsc0JBQXNCLENBQUN6dUIsQ0FBQyxDQUFDO1FBQ2xDO1FBRUEsSUFBSTRtQixJQUFJLENBQUNsRCxNQUFNLENBQUNpSSxHQUFHLENBQUNELFlBQVksRUFBRTtVQUM5QixJQUFJOUUsSUFBSSxDQUFDd0YsWUFBWSxHQUFHcHNCLENBQUMsRUFBRTtZQUN2QjRtQixJQUFJLENBQUM4SCxpQkFBaUIsQ0FBQzF1QixDQUFDLENBQUM7VUFDN0I7UUFDSjtNQUNKO01BQ0EsSUFBSSxDQUFDbXNCLGFBQWEsR0FBRyxJQUFJLENBQUNDLFlBQVk7TUFDdEMsSUFBSSxDQUFDQSxZQUFZLEdBQUdwc0IsQ0FBQztNQUVyQjRtQixJQUFJLENBQUNpRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUvUSxFQUFFLENBQUM7SUFDcEM7RUFBQztJQUFBbmxCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUErM0IsY0FBQSxFQUFnQjtNQUNaLElBQU0vSCxJQUFJLEdBQUcsSUFBSTtNQUNqQixJQUFJZ0ksUUFBUSxHQUFHaEksSUFBSSxDQUFDd0YsWUFBWTtNQUNoQyxJQUFNeUMsWUFBWSxHQUFHakksSUFBSSxDQUFDM1AsS0FBSyxDQUFDcGtCLE1BQU07TUFFdEMrN0IsUUFBUSxLQUFLQyxZQUFZLEdBQUcsQ0FBQyxHQUFHRCxRQUFRLEdBQUcsQ0FBQyxHQUFHQSxRQUFRLElBQUksQ0FBQztNQUM1RCxJQUFNRSxZQUFZLEdBQUdsSSxJQUFJLENBQUMzUCxLQUFLLENBQUMyWCxRQUFRLENBQUM7TUFFekNoSSxJQUFJLENBQUNzSCxzQkFBc0IsQ0FBQ1UsUUFBUSxFQUFFRSxZQUFZLEVBQUUsSUFBSSxDQUFDO0lBQzdEO0VBQUM7SUFBQW40QixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBbTRCLGNBQUEsRUFBZ0I7TUFDWixJQUFNbkksSUFBSSxHQUFHLElBQUk7TUFDakIsSUFBSW9JLFFBQVEsR0FBR3BJLElBQUksQ0FBQ3dGLFlBQVk7TUFDaEMsSUFBTXlDLFlBQVksR0FBR2pJLElBQUksQ0FBQzNQLEtBQUssQ0FBQ3BrQixNQUFNO01BRXRDbThCLFFBQVEsS0FBSyxDQUFDLEdBQUdBLFFBQVEsR0FBR0gsWUFBWSxHQUFHLENBQUMsR0FBR0csUUFBUSxJQUFJLENBQUM7TUFDNUQsSUFBTUMsWUFBWSxHQUFHckksSUFBSSxDQUFDM1AsS0FBSyxDQUFDK1gsUUFBUSxDQUFDO01BRXpDcEksSUFBSSxDQUFDc0gsc0JBQXNCLENBQUNjLFFBQVEsRUFBRUMsWUFBWSxFQUFFLElBQUksQ0FBQztJQUM3RDtFQUFDO0lBQUF0NEIsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQTYzQix1QkFBdUJ6dUIsQ0FBQyxFQUFFO01BQ3RCLElBQUk0bUIsSUFBSSxHQUFHLElBQUk7TUFDZixJQUFJcUYsWUFBWSxHQUFBaEYsa0JBQUEsQ0FBT0wsSUFBSSxDQUFDcUYsWUFBWSxDQUFDO01BRXpDQSxZQUFZLENBQUNsNEIsT0FBTyxDQUFDLFVBQUNxM0IsT0FBTyxFQUFLO1FBQzlCLElBQUd4RSxJQUFJLENBQUNsRCxNQUFNLENBQUM0SCxTQUFTLENBQUNGLE9BQU8sRUFBRTtVQUM5QkYsK0RBQVMsQ0FBQ0UsT0FBTyxFQUFFO1lBQ2Y4RCxRQUFRLEVBQUUsU0FBQUEsU0FBQSxFQUFNO2NBQ1o5RCxPQUFPLENBQUN4MkIsU0FBUyxDQUFDRSxNQUFNLENBQUM4eEIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDNEMsT0FBTyxDQUFDOVIsTUFBTSxDQUFDO2NBQ3BELElBQUkyYSxPQUFPLEdBQUdsRCxZQUFZLENBQUNqc0IsQ0FBQyxDQUFDO2NBQzdCaXJCLDhEQUFRLENBQUNrRSxPQUFPLEVBQUU7Z0JBQ2R0TyxRQUFRLEVBQUU7Y0FDZCxDQUFDLENBQUM7Y0FDRnNPLE9BQU8sQ0FBQ3Y2QixTQUFTLENBQUNNLEdBQUcsQ0FBQzB4QixJQUFJLENBQUNsRCxNQUFNLENBQUM0QyxPQUFPLENBQUM5UixNQUFNLENBQUM7WUFDckQ7VUFDSixDQUFDLENBQUM7UUFFTixDQUFDLE1BQ0k7VUFDRDRXLE9BQU8sQ0FBQ3gyQixTQUFTLENBQUNFLE1BQU0sQ0FBQzh4QixJQUFJLENBQUNsRCxNQUFNLENBQUM0QyxPQUFPLENBQUM5UixNQUFNLENBQUM7UUFDeEQ7TUFDSixDQUFDLENBQUM7TUFDRixJQUFHLENBQUNvUyxJQUFJLENBQUNsRCxNQUFNLENBQUM0SCxTQUFTLENBQUNGLE9BQU8sRUFBRTtRQUMvQmEsWUFBWSxDQUFDanNCLENBQUMsQ0FBQyxDQUFDcEwsU0FBUyxDQUFDTSxHQUFHLENBQUMweEIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDNEMsT0FBTyxDQUFDOVIsTUFBTSxDQUFDO01BQzdEO0lBRUo7RUFBQztJQUFBN2QsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQTAxQixvQkFBQSxFQUFzQjtNQUNsQjtBQUNSO0FBQ0E7QUFDQTtNQUNRLElBQUkxRixJQUFJLEdBQUcsSUFBSTtNQUNmLElBQUkzUCxLQUFLLEdBQUcyUCxJQUFJLENBQUMzUCxLQUFLO01BRXRCLElBQUloakIsS0FBSyxHQUFHLENBQUM7TUFDYixJQUFJbTdCLFdBQVcsR0FBRyxLQUFLO01BRXZCLElBQUl4SSxJQUFJLENBQUNsRCxNQUFNLENBQUM0SCxTQUFTLENBQUM1ZixPQUFPLEVBQUU7UUFDL0J1TCxLQUFLLENBQUNsakIsT0FBTyxDQUFDLFVBQUNzN0IsSUFBSSxFQUFFcnZCLENBQUMsRUFBSztVQUN2QixJQUFNdXVCLFdBQVcsR0FBR2MsSUFBSSxDQUFDNTdCLGFBQWEsQ0FBQ216QixJQUFJLENBQUNsRCxNQUFNLENBQUN5SCxTQUFTLENBQUN6ZixPQUFPLENBQUM7VUFFckUsSUFBSTJqQixJQUFJLENBQUN6NkIsU0FBUyxDQUFDQyxRQUFRLENBQUMreEIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDNEMsT0FBTyxDQUFDOVIsTUFBTSxDQUFDLEVBQUU7WUFDckQsSUFBSSxDQUFDb1MsSUFBSSxDQUFDbEQsTUFBTSxDQUFDaUksR0FBRyxDQUFDSixXQUFXLEVBQUU7Y0FDOUJnRCxXQUFXLENBQUNsNkIsS0FBSyxDQUFDNGxCLE9BQU8sR0FBRzJNLElBQUksQ0FBQ2xELE1BQU0sQ0FBQzRDLE9BQU8sQ0FBQ3JNLE9BQU87WUFDM0Q7WUFDQWhtQixLQUFLLEdBQUcrTCxDQUFDO1lBQ1RvdkIsV0FBVyxHQUFHLElBQUk7VUFDdEIsQ0FBQyxNQUFNO1lBQ0hiLFdBQVcsQ0FBQ2w2QixLQUFLLENBQUM0bEIsT0FBTyxHQUFHLE1BQU07VUFDdEM7UUFDSixDQUFDLENBQUM7UUFFRixJQUFJLENBQUNtVixXQUFXLElBQUksQ0FBQ3hJLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ2lJLEdBQUcsQ0FBQ0osV0FBVyxFQUFFO1VBQzlDLElBQU0rRCxZQUFZLEdBQUdyWSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUN4akIsYUFBYSxDQUFDbXpCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ3lILFNBQVMsQ0FBQ3pmLE9BQU8sQ0FBQztVQUMxRXVMLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ3JpQixTQUFTLENBQUNNLEdBQUcsQ0FBQzB4QixJQUFJLENBQUNsRCxNQUFNLENBQUM0QyxPQUFPLENBQUM5UixNQUFNLENBQUM7VUFDbEQ4YSxZQUFZLENBQUNqN0IsS0FBSyxDQUFDNGxCLE9BQU8sR0FBRzJNLElBQUksQ0FBQ2xELE1BQU0sQ0FBQzRDLE9BQU8sQ0FBQ3JNLE9BQU87UUFDNUQ7TUFDSjtJQUNKO0VBQUM7SUFBQXRqQixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBbzNCLGFBQUEsRUFBZTtNQUNYLElBQUlwSCxJQUFJLEdBQUcsSUFBSTtNQUNmLElBQUkzUCxLQUFLLEdBQUcyUCxJQUFJLENBQUMzUCxLQUFLO01BRXRCLElBQUcyUCxJQUFJLENBQUNsRCxNQUFNLENBQUM0SCxTQUFTLENBQUM1ZixPQUFPLEVBQUU7UUFFOUJ1TCxLQUFLLENBQUNsakIsT0FBTyxDQUFDLFVBQUNzN0IsSUFBSSxFQUFFcnZCLENBQUMsRUFBSztVQUN2QixJQUFJdXVCLFdBQVcsR0FBR2MsSUFBSSxDQUFDNTdCLGFBQWEsQ0FBQ216QixJQUFJLENBQUNsRCxNQUFNLENBQUN5SCxTQUFTLENBQUN6ZixPQUFPLENBQUM7VUFDbkU2aUIsV0FBVyxDQUFDbDZCLEtBQUssQ0FBQzRsQixPQUFPLEdBQUcsRUFBRTtRQUNsQyxDQUFDLENBQUM7TUFDTjtJQUNKO0VBQUM7SUFBQXRqQixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBaXlCLGFBQUEsRUFBZTtNQUNYLElBQU1qQyxJQUFJLEdBQUcsSUFBSTtNQUVqQixJQUFNMkksV0FBVyxHQUFHbmMsMkRBQVcsQ0FBQ3dULElBQUksQ0FBQ3RoQixRQUFRLENBQUNyQixZQUFZLENBQUMyaUIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDL2lCLElBQUksQ0FBQzBsQixLQUFLLENBQUMsQ0FBQyxJQUM1RU8sSUFBSSxDQUFDbEQsTUFBTSxDQUFDaUksR0FBRyxDQUFDdEYsS0FBSztNQUM1QixJQUFJa0osV0FBVyxFQUFFO1FBQ2JBLFdBQVcsR0FBRzNJLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ2lJLEdBQUcsQ0FBQ3RGLEtBQUssR0FBRyxJQUFJLEdBQUdPLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ2lJLEdBQUcsQ0FBQ3RGLEtBQUssR0FBRyxLQUFLO01BQzlFOztNQUVBO0FBQ1I7QUFDQTtBQUNBOztNQUVRLElBQU1tSixXQUFXLEdBQUdwYywyREFBVyxDQUFDd1QsSUFBSSxDQUFDdGhCLFFBQVEsQ0FBQ3JCLFlBQVksQ0FBQzJpQixJQUFJLENBQUNsRCxNQUFNLENBQUMvaUIsSUFBSSxDQUFDeUQsSUFBSSxDQUFDLENBQUMsSUFDM0V3aUIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDaUksR0FBRyxDQUFDQyxNQUFNO01BRTdCLElBQUk0RCxXQUFXLEVBQUU7UUFDYjVJLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ2lJLEdBQUcsQ0FBQ0MsTUFBTSxHQUFHLElBQUk7UUFDN0JoRixJQUFJLENBQUNsRCxNQUFNLENBQUNpSSxHQUFHLENBQUN0RixLQUFLLEdBQUcsSUFBSTtNQUNoQyxDQUFDLE1BQU07UUFDSE8sSUFBSSxDQUFDbEQsTUFBTSxDQUFDaUksR0FBRyxDQUFDQyxNQUFNLEdBQUcsS0FBSztNQUNsQztNQUVBLElBQU02RCxhQUFhLEdBQUdyYywyREFBVyxDQUFDd1QsSUFBSSxDQUFDdGhCLFFBQVEsQ0FBQ3JCLFlBQVksQ0FBQzJpQixJQUFJLENBQUNsRCxNQUFNLENBQUMvaUIsSUFBSSxDQUFDNHFCLFdBQVcsQ0FBQyxDQUFDLElBQ3BGM0UsSUFBSSxDQUFDbEQsTUFBTSxDQUFDaUksR0FBRyxDQUFDSixXQUFXO01BRWxDLElBQUlrRSxhQUFhLEVBQUU7UUFDZjdJLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ2lJLEdBQUcsQ0FBQ0osV0FBVyxHQUFHLElBQUk7UUFDbEMzRSxJQUFJLENBQUNsRCxNQUFNLENBQUNpSSxHQUFHLENBQUN0RixLQUFLLEdBQUcsSUFBSTtNQUNoQztNQUVBLElBQU1xSixTQUFTLEdBQUd0YywyREFBVyxDQUFDd1QsSUFBSSxDQUFDdGhCLFFBQVEsQ0FBQ3JCLFlBQVksQ0FBQzJpQixJQUFJLENBQUNsRCxNQUFNLENBQUMvaUIsSUFBSSxDQUFDeXFCLE9BQU8sQ0FBQyxDQUFDLElBQzVFeEUsSUFBSSxDQUFDbEQsTUFBTSxDQUFDaUksR0FBRyxDQUFDRSxVQUFVO01BQ2pDLElBQUk2RCxTQUFTLEVBQUU7UUFDWDlJLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ2lJLEdBQUcsQ0FBQ0UsVUFBVSxHQUFHLElBQUk7O1FBRWpDO1FBQ0FqRixJQUFJLENBQUNsRCxNQUFNLENBQUNpSSxHQUFHLENBQUNDLE1BQU0sR0FBRyxLQUFLO1FBQzlCaEYsSUFBSSxDQUFDbEQsTUFBTSxDQUFDaUksR0FBRyxDQUFDdEYsS0FBSyxHQUFHLEtBQUs7UUFDN0JPLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ2lJLEdBQUcsQ0FBQ0osV0FBVyxHQUFHLEtBQUs7TUFDdkM7TUFFQSxJQUFNb0UsY0FBYyxHQUFHL0ksSUFBSSxDQUFDdGhCLFFBQVEsQ0FBQ3JCLFlBQVksQ0FBQzJpQixJQUFJLENBQUNsRCxNQUFNLENBQUMvaUIsSUFBSSxDQUFDNnFCLGdCQUFnQixDQUFDO01BRXBGLElBQUltRSxjQUFjLEVBQUU7UUFDaEJBLGNBQWMsS0FBSyxJQUFJLEdBQUcvSSxJQUFJLENBQUNsRCxNQUFNLENBQUM0SCxTQUFTLENBQUM1ZixPQUFPLEdBQUcsSUFBSSxHQUFHa2IsSUFBSSxDQUFDbEQsTUFBTSxDQUFDNEgsU0FBUyxDQUFDNWYsT0FBTyxHQUFHLEtBQUs7TUFDMUc7TUFFQSxJQUFNa2tCLGNBQWMsR0FBR2hKLElBQUksQ0FBQ3RoQixRQUFRLENBQUNyQixZQUFZLENBQUMyaUIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDL2lCLElBQUksQ0FBQzhxQixnQkFBZ0IsQ0FBQztNQUNwRixJQUFJbUUsY0FBYyxFQUFFO1FBQ2hCQSxjQUFjLEtBQUssSUFBSSxHQUFHaEosSUFBSSxDQUFDbEQsTUFBTSxDQUFDNEgsU0FBUyxDQUFDRixPQUFPLEdBQUcsSUFBSSxHQUFHeEUsSUFBSSxDQUFDbEQsTUFBTSxDQUFDNEgsU0FBUyxDQUFDRixPQUFPLEdBQUcsS0FBSztNQUMxRztNQUVBLElBQU1uUixPQUFPLEdBQUcyTSxJQUFJLENBQUN0aEIsUUFBUSxDQUFDckIsWUFBWSxDQUFDMmlCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQy9pQixJQUFJLENBQUNzWixPQUFPLENBQUMsSUFDN0QyTSxJQUFJLENBQUNsRCxNQUFNLENBQUM0QyxPQUFPLENBQUNyTSxPQUFPO01BQ2xDMk0sSUFBSSxDQUFDbEQsTUFBTSxDQUFDNEMsT0FBTyxDQUFDck0sT0FBTyxHQUFHQSxPQUFPLEtBQUssTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPO01BRW5FLElBQU00VixjQUFjLEdBQUd6YywyREFBVyxDQUFDd1QsSUFBSSxDQUFDdGhCLFFBQVEsQ0FBQ3JCLFlBQVksQ0FBQzJpQixJQUFJLENBQUNsRCxNQUFNLENBQUMvaUIsSUFBSSxDQUFDK3FCLFlBQVksQ0FBQyxDQUFDLElBQ3RGOUUsSUFBSSxDQUFDbEQsTUFBTSxDQUFDaUksR0FBRyxDQUFDRCxZQUFZO01BQ25DLElBQUltRSxjQUFjLEVBQUU7UUFDaEJqSixJQUFJLENBQUNsRCxNQUFNLENBQUNpSSxHQUFHLENBQUNELFlBQVksR0FBRyxJQUFJO1FBQ25DOUUsSUFBSSxDQUFDbEQsTUFBTSxDQUFDaUksR0FBRyxDQUFDQyxNQUFNLEdBQUcsS0FBSztNQUNsQztNQUVBaEYsSUFBSSxDQUFDaUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5Qjs7SUFFQTtFQUFBO0lBQUFsMkIsR0FBQTtJQUFBQyxLQUFBLEVBQ0EsU0FBQWs1QixVQUFValEsQ0FBQyxFQUFFO01BQ1QsT0FBTyxVQUFVLENBQUNrRixJQUFJLENBQUNsRixDQUFDLENBQUM7SUFDN0I7RUFBQztJQUFBbHBCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFtMUIsWUFBQSxFQUFjO01BQ1YsSUFBTWdFLFFBQVEsR0FBRyxJQUFJLENBQUM3SixPQUFPLENBQUN2TCxLQUFLLENBQUMsQ0FBQyxDQUFDO01BQ3RDLElBQUksSUFBSSxDQUFDbVYsU0FBUyxDQUFDQyxRQUFRLENBQUMsRUFBRTtRQUMxQixJQUFJLENBQUNyTSxNQUFNLENBQUNvSSxJQUFJLENBQUN6MEIsSUFBSSxHQUFHMDRCLFFBQVE7TUFDcEMsQ0FBQyxNQUFNO1FBQ0gsSUFBSSxDQUFDck0sTUFBTSxDQUFDb0ksSUFBSSxDQUFDejBCLElBQUksR0FBRyxLQUFLO01BQ2pDO0lBQ0o7RUFBQztJQUFBVixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBeTFCLFFBQUEsRUFBVTtNQUNOLElBQUl6RixJQUFJLEdBQUcsSUFBSTtNQUNmLElBQUl2cUIsSUFBSSxHQUFHdXFCLElBQUksQ0FBQy9qQixPQUFPO01BRXZCeEcsSUFBSSxDQUFDdEksT0FBTyxDQUFDLFVBQUNvZCxHQUFHLEVBQUVuUixDQUFDLEVBQUs7UUFDckIsSUFBSTZ0QixVQUFVLEdBQUcxYyxHQUFHLENBQUN6TyxPQUFPLENBQUNra0IsSUFBSSxDQUFDbEQsTUFBTSxDQUFDeUgsU0FBUyxDQUFDbjNCLElBQUksQ0FBQztRQUN4RCxJQUFJODVCLFdBQVcsR0FBR0QsVUFBVSxDQUFDcDZCLGFBQWEsQ0FBQ216QixJQUFJLENBQUNsRCxNQUFNLENBQUN5SCxTQUFTLENBQUN6ZixPQUFPLENBQUM7UUFFekUsSUFBSWdOLE9BQU8sRUFBRXFWLE1BQU07UUFDbkIsSUFBR25ILElBQUksQ0FBQ2xELE1BQU0sQ0FBQ29JLElBQUksQ0FBQ3owQixJQUFJLEVBQUU7VUFDdEJxaEIsT0FBTyxNQUFBbmtCLE1BQUEsQ0FBTXF5QixJQUFJLENBQUNsRCxNQUFNLENBQUNvSSxJQUFJLENBQUN6MEIsSUFBSSxPQUFBOUMsTUFBQSxDQUFJcXlCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ29JLElBQUksQ0FBQ3BnQixPQUFPLE9BQUFuWCxNQUFBLENBQUl5TCxDQUFDLENBQUU7VUFDckUrdEIsTUFBTSxNQUFBeDVCLE1BQUEsQ0FBTXF5QixJQUFJLENBQUNsRCxNQUFNLENBQUNvSSxJQUFJLENBQUN6MEIsSUFBSSxPQUFBOUMsTUFBQSxDQUFJcXlCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ29JLElBQUksQ0FBQzNuQixNQUFNLE9BQUE1UCxNQUFBLENBQUl5TCxDQUFDLENBQUU7UUFDdkU7UUFFQSxJQUFHNnRCLFVBQVUsQ0FBQ2o1QixTQUFTLENBQUNDLFFBQVEsQ0FBQyt4QixJQUFJLENBQUNsRCxNQUFNLENBQUM0QyxPQUFPLENBQUM5UixNQUFNLENBQUMsRUFBRTtVQUMxRHJELEdBQUcsQ0FBQ3hDLFlBQVksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDO1VBQ3ZDbWYsV0FBVyxDQUFDbmYsWUFBWSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUM7UUFDbEQsQ0FBQyxNQUNJO1VBQ0R3QyxHQUFHLENBQUN4QyxZQUFZLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQztVQUN4Q21mLFdBQVcsQ0FBQ25mLFlBQVksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDO1FBQ2pEO1FBRUEsSUFBR2lZLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ29JLElBQUksQ0FBQ3owQixJQUFJLEVBQUU7VUFDdEI4WixHQUFHLENBQUN4QyxZQUFZLENBQUMsZUFBZSxFQUFFK0osT0FBTyxDQUFDO1VBQzFDdkgsR0FBRyxDQUFDeEMsWUFBWSxDQUFDLElBQUksRUFBRW9mLE1BQU0sQ0FBQztVQUM5QkQsV0FBVyxDQUFDbmYsWUFBWSxDQUFDLElBQUksRUFBRStKLE9BQU8sQ0FBQztVQUN2Q29WLFdBQVcsQ0FBQ25mLFlBQVksQ0FBQyxpQkFBaUIsRUFBRW9mLE1BQU0sQ0FBQztRQUN2RDtRQUNBRCxXQUFXLENBQUNuZixZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQztNQUM5QyxDQUFDLENBQUM7SUFDTjtFQUFDO0lBQUFoWSxHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBMDJCLGlCQUFpQnhSLEVBQUUsRUFBRTtNQUNqQixJQUFJOEssSUFBSSxHQUFHLElBQUk7TUFDZixJQUFJdnFCLElBQUksR0FBR3lmLEVBQUUsQ0FBQ2ppQixNQUFNO01BRXBCd0MsSUFBSSxDQUFDekgsU0FBUyxDQUFDTSxHQUFHLENBQUMweEIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDNEMsT0FBTyxDQUFDelgsS0FBSyxDQUFDO0lBQ2pEO0VBQUM7SUFBQWxZLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUEyMkIsZ0JBQWdCelIsRUFBRSxFQUFFO01BQ2hCLElBQUk4SyxJQUFJLEdBQUcsSUFBSTtNQUNmLElBQUl2cUIsSUFBSSxHQUFHeWYsRUFBRSxDQUFDamlCLE1BQU07TUFDcEJ3QyxJQUFJLENBQUN6SCxTQUFTLENBQUNFLE1BQU0sQ0FBQzh4QixJQUFJLENBQUNsRCxNQUFNLENBQUM0QyxPQUFPLENBQUN6WCxLQUFLLENBQUM7SUFDcEQ7RUFBQztJQUFBbFksR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQTQyQixlQUFlMVIsRUFBRSxFQUFFO01BQ2YsSUFBSThLLElBQUksR0FBRyxJQUFJO01BQ2YsSUFBSXZxQixJQUFJLEdBQUd5ZixFQUFFLENBQUNqaUIsTUFBTTtNQUNwQixJQUFJbEQsR0FBRyxHQUFHbWxCLEVBQUUsQ0FBQ2tVLEtBQUssQ0FBQ0MsUUFBUSxDQUFDLENBQUM7TUFFN0IsSUFBSUMsUUFBUSxHQUFBakosa0JBQUEsQ0FBT0wsSUFBSSxDQUFDL2pCLE9BQU8sQ0FBQztNQUVoQyxJQUFJc3RCLFlBQVksR0FBR3ZKLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ3lILFNBQVMsQ0FBQ3RvQixPQUFPLENBQUM4WCxLQUFLLENBQUMsQ0FBQyxDQUFDOztNQUV6RDtNQUNBLElBQUl5VixZQUFZLEdBQUl0VSxFQUFFLENBQUN1VSxPQUFPLElBQUkxNUIsR0FBRyxDQUFDcUUsS0FBSyxDQUFDLE9BQU8sQ0FBRTtNQUVyRCxJQUFJcUIsSUFBSSxDQUFDekgsU0FBUyxDQUFDQyxRQUFRLENBQUNzN0IsWUFBWSxDQUFDLEVBQUU7UUFDdkM7UUFDQTtRQUNBLElBQUl4NUIsR0FBRyxDQUFDcUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJbzFCLFlBQVksRUFBRTtVQUNwQyxJQUFJbjhCLEtBQUssR0FBR2k4QixRQUFRLENBQUN6eUIsT0FBTyxDQUFDcEIsSUFBSSxDQUFDO1VBQ2xDLElBQUlvUixTQUFTLEdBQUk5VyxHQUFHLENBQUNxRSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztVQUM3QyxJQUFJbkksTUFBTSxHQUFHcTlCLFFBQVEsQ0FBQ3I5QixNQUFNO1VBQzVCLElBQUl5OUIsUUFBUSxHQUFHLENBQUNyOEIsS0FBSyxHQUFHcEIsTUFBTSxHQUFHNGEsU0FBUyxJQUFJNWEsTUFBTTtVQUNwRHE5QixRQUFRLENBQUNJLFFBQVEsQ0FBQyxDQUFDemhCLEtBQUssQ0FBQyxDQUFDO1FBQzlCLENBQUMsTUFDSSxJQUFJbFksR0FBRyxDQUFDcUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1VBQ3pCO1VBQ0EsUUFBUXJFLEdBQUc7WUFDUDtZQUNBLEtBQUssSUFBSTtjQUNMdTVCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ3JoQixLQUFLLENBQUMsQ0FBQztjQUNuQjtZQUNKO1lBQ0EsS0FBSyxJQUFJO2NBQ0xxaEIsUUFBUSxDQUFDQSxRQUFRLENBQUNyOUIsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDZ2MsS0FBSyxDQUFDLENBQUM7Y0FDckM7VUFDUjtRQUNKO01BQ0o7SUFDSjtFQUFDO0lBQUFsWSxHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBODNCLGtCQUFrQnRDLFlBQVksRUFBRTtNQUM1QixJQUFNeEYsSUFBSSxHQUFHLElBQUk7TUFDakIsSUFBTXZxQixJQUFJLEdBQUd1cUIsSUFBSSxDQUFDL2pCLE9BQU8sQ0FBQyxDQUFDLENBQUM7TUFDNUIsSUFBTTB0QixvQkFBb0IsR0FBR2wwQixJQUFJLENBQUNtMEIscUJBQXFCLENBQUMsQ0FBQztNQUN6RCxJQUFNQyxVQUFVLEdBQUdGLG9CQUFvQixDQUFDcDhCLE1BQU07TUFDOUMsSUFBTTJLLE1BQU0sR0FBRzJ4QixVQUFVLEdBQUdyRSxZQUFZO01BQ3hDLElBQU1zRSxnQkFBZ0IsR0FBRzU2QixNQUFNLENBQUN5bEIsV0FBVyxJQUFJL25CLFFBQVEsQ0FBQ3lYLGVBQWUsQ0FBQ3ZILFNBQVM7TUFDakYsSUFBTTRkLFFBQVEsR0FBR2lQLG9CQUFvQixDQUFDdjZCLEdBQUcsR0FBRzA2QixnQkFBZ0IsR0FBRzV4QixNQUFNLEdBQUcsRUFBRTtNQUMxRTtNQUNBNGhCLG1FQUFZLENBQUM7UUFDVEUsRUFBRSxFQUFFVSxRQUFRO1FBQ1pULFFBQVEsRUFBRSxDQUFDO1FBQ1hFLE1BQU0sRUFBRTVDLCtEQUFVQTtNQUN0QixDQUFDLENBQUM7SUFDTjtFQUFDO0FBQUE7QUFJTCwrREFBZXROLGNBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1akJlO0FBQ2lCO0FBQUEsSUFFdkR3TCxnQkFBZ0IsMEJBQUF1VSxjQUFBO0VBRWxCLFNBQUF2VSxpQkFBWWppQixPQUFPLEVBQUU7SUFBQSxJQUFBdEQsS0FBQTtJQUFBVixlQUFBLE9BQUFpbUIsZ0JBQUE7SUFDakJ2bEIsS0FBQSxHQUFBKzVCLFVBQUEsT0FBQXhVLGdCQUFBO0lBQ0F2bEIsS0FBQSxDQUFLdXJCLFFBQVEsR0FBRztNQUNaNkQsT0FBTyxFQUFFLHNCQUFzQjtNQUMvQmlGLFNBQVMsRUFBRTtRQUNQMkYsUUFBUSxFQUFFLG1CQUFtQjtRQUM3QjFvQixLQUFLLEVBQUU7TUFDWCxDQUFDO01BQ0RrZSxPQUFPLEVBQUU7UUFDTDlSLE1BQU0sRUFBRTtNQUNaLENBQUM7TUFDRG5XLElBQUksRUFBRTtJQUNWLENBQUM7SUFFRHZILEtBQUEsQ0FBSzRzQixNQUFNLEdBQUd1QyxzRUFBYyxDQUFDbnZCLEtBQUEsQ0FBS3VyQixRQUFRLEVBQUVqb0IsT0FBTyxDQUFDO0lBRXBEdEQsS0FBQSxDQUFLaTZCLGdCQUFnQixNQUFBeDhCLE1BQUEsQ0FBTXVDLEtBQUEsQ0FBSzRzQixNQUFNLENBQUN3QyxPQUFPLE9BQUEzeEIsTUFBQSxDQUFJdUMsS0FBQSxDQUFLNHNCLE1BQU0sQ0FBQ3lILFNBQVMsQ0FBQzJGLFFBQVEsQ0FBRTtJQUVsRmg2QixLQUFBLENBQUtrNkIsYUFBYSxHQUFHeDlCLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUNnRCxLQUFBLENBQUtpNkIsZ0JBQWdCLENBQUM7SUFFckVqNkIsS0FBQSxDQUFLTCxJQUFJLENBQUMsQ0FBQztJQUFDLE9BQUFLLEtBQUE7RUFDaEI7RUFBQ202QixTQUFBLENBQUE1VSxnQkFBQSxFQUFBdVUsY0FBQTtFQUFBLE9BQUFsNkIsWUFBQSxDQUFBMmxCLGdCQUFBO0lBQUExbEIsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQUgsS0FBQSxFQUFPO01BQ0gsSUFBSSxDQUFDeTZCLGFBQWEsQ0FBQyxDQUFDO01BQ3BCLElBQUksQ0FBQ0MscUJBQXFCLENBQUMsQ0FBQztJQUNoQztFQUFDO0lBQUF4NkIsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQXM2QixjQUFBLEVBQWdCO01BQ1osSUFBSSxDQUFDRSxpQkFBaUIsR0FBRyxJQUFJLENBQUNBLGlCQUFpQixDQUFDN04sSUFBSSxDQUFDLElBQUksQ0FBQztJQUM5RDtFQUFDO0lBQUE1c0IsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQXU2QixzQkFBQSxFQUF3QjtNQUNwQixJQUFNdkssSUFBSSxHQUFHLElBQUk7TUFDakIsSUFBTXlLLFNBQVMsR0FBR3pLLElBQUksQ0FBQ29LLGFBQWE7TUFFcENLLFNBQVMsQ0FBQ3Q5QixPQUFPLENBQUMsVUFBQys4QixRQUFRLEVBQUs7UUFDNUJBLFFBQVEsQ0FBQ3Q4QixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUVveUIsSUFBSSxDQUFDd0ssaUJBQWlCLENBQUM7TUFDL0QsQ0FBQyxDQUFDO0lBQ047RUFBQztJQUFBejZCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUF3NkIsa0JBQWtCdFYsRUFBRSxFQUFFO01BQ2xCLElBQU13VixZQUFZLEdBQUd4VixFQUFFLENBQUN5TCxhQUFhO01BQ3JDLElBQU1nSyxZQUFZLEdBQUdELFlBQVksQ0FBQzE2QixLQUFLO01BQ3ZDLElBQU13MUIsWUFBWSxHQUFHa0YsWUFBWSxDQUFDbDNCLE9BQU8sQ0FBQ0MsYUFBYTtNQUV2RCxLQUFLLElBQUkyRixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdzeEIsWUFBWSxDQUFDbDNCLE9BQU8sQ0FBQ3ZILE1BQU0sRUFBRW1OLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDckRzeEIsWUFBWSxDQUFDbDNCLE9BQU8sQ0FBQzRGLENBQUMsQ0FBQyxDQUFDNE8sZUFBZSxDQUFDLFVBQVUsQ0FBQztNQUN2RDtNQUNBMGlCLFlBQVksQ0FBQ2wzQixPQUFPLENBQUNneUIsWUFBWSxDQUFDLENBQUN6ZCxZQUFZLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQztNQUV2RTZpQixJQUFBLENBQUFDLGVBQUEsQ0FBQXBWLGdCQUFBLENBQUEzQixTQUFBLDJCQUFBRSxJQUFBLE9BQXFCMlcsWUFBWTtJQUNyQztFQUFDO0lBQUE1NkIsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQTg2Qix3QkFBQSxFQUEwQjtNQUN0QixJQUFNOUssSUFBSSxHQUFHLElBQUk7TUFDakIsSUFBTXlLLFNBQVMsR0FBR3pLLElBQUksQ0FBQ29LLGFBQWE7TUFFcENLLFNBQVMsQ0FBQ3Q5QixPQUFPLENBQUMsVUFBQys4QixRQUFRLEVBQUs7UUFDNUJBLFFBQVEsQ0FBQ2pHLG1CQUFtQixDQUFDLFFBQVEsRUFBRWpFLElBQUksQ0FBQ3dLLGlCQUFpQixDQUFDO01BQ2xFLENBQUMsQ0FBQztJQUNOO0VBQUM7QUFBQSxFQS9EMEJULHNEQUFhO0FBbUU1QywrREFBZXRVLGdCQUFnQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3RFYTtBQUNpQjtBQUFBLElBRXZERCxXQUFXLDBCQUFBd1UsY0FBQTtFQUViLFNBQUF4VSxZQUFZaGlCLE9BQU8sRUFBRTtJQUFBLElBQUF0RCxLQUFBO0lBQUFWLGVBQUEsT0FBQWdtQixXQUFBO0lBQ2pCdGxCLEtBQUEsR0FBQSs1QixVQUFBLE9BQUF6VSxXQUFBO0lBQ0F0bEIsS0FBQSxDQUFLdXJCLFFBQVEsR0FBRztNQUNaNkQsT0FBTyxFQUFFLGtCQUFrQjtNQUMzQmlGLFNBQVMsRUFBRTtRQUNQd0csR0FBRyxFQUFFLG1CQUFtQjtRQUN4QnZwQixLQUFLLEVBQUU7TUFDWCxDQUFDO01BQ0RrZSxPQUFPLEVBQUU7UUFDTDlSLE1BQU0sRUFBRTtNQUNaLENBQUM7TUFDRG5XLElBQUksRUFBRTtJQUNWLENBQUM7SUFFRHZILEtBQUEsQ0FBSzRzQixNQUFNLEdBQUd1QyxzRUFBYyxDQUFDbnZCLEtBQUEsQ0FBS3VyQixRQUFRLEVBQUVqb0IsT0FBTyxDQUFDO0lBRXBEdEQsS0FBQSxDQUFLd08sUUFBUSxNQUFBL1EsTUFBQSxDQUFNdUMsS0FBQSxDQUFLNHNCLE1BQU0sQ0FBQ3dDLE9BQU8sT0FBQTN4QixNQUFBLENBQUl1QyxLQUFBLENBQUs0c0IsTUFBTSxDQUFDeUgsU0FBUyxDQUFDd0csR0FBRyxDQUFFO0lBRXJFNzZCLEtBQUEsQ0FBS21nQixLQUFLLEdBQUd6akIsUUFBUSxDQUFDTSxnQkFBZ0IsQ0FBQ2dELEtBQUEsQ0FBS3dPLFFBQVEsQ0FBQztJQUVyRHhPLEtBQUEsQ0FBS0wsSUFBSSxDQUFDLENBQUM7SUFBQyxPQUFBSyxLQUFBO0VBQ2hCO0VBQUNtNkIsU0FBQSxDQUFBN1UsV0FBQSxFQUFBd1UsY0FBQTtFQUFBLE9BQUFsNkIsWUFBQSxDQUFBMGxCLFdBQUE7SUFBQXpsQixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBSCxLQUFBLEVBQU87TUFDSCs2QixJQUFBLENBQUFDLGVBQUEsQ0FBQXJWLFdBQUEsQ0FBQTFCLFNBQUEsMEJBQUFFLElBQUE7TUFDQTRXLElBQUEsQ0FBQUMsZUFBQSxDQUFBclYsV0FBQSxDQUFBMUIsU0FBQSw0QkFBQUUsSUFBQTtJQUNKO0VBQUM7QUFBQSxFQTVCcUIrVixzREFBYTtBQWdDdkMsK0RBQWV2VSxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkNpQztBQUNmO0FBQUEsSUFFdENFLG1CQUFtQiwwQkFBQXNVLGNBQUE7RUFFckIsU0FBQXRVLG9CQUFZbGlCLE9BQU8sRUFBRTtJQUFBLElBQUF0RCxLQUFBO0lBQUFWLGVBQUEsT0FBQWttQixtQkFBQTtJQUNqQnhsQixLQUFBLEdBQUErNUIsVUFBQSxPQUFBdlUsbUJBQUE7SUFDQXhsQixLQUFBLENBQUt1ckIsUUFBUSxHQUFHO01BQ1o2RCxPQUFPLEVBQUUseUJBQXlCO01BQ2xDaUYsU0FBUyxFQUFFO1FBQ1B3RyxHQUFHLEVBQUUsbUJBQW1CO1FBQ3hCYixRQUFRLEVBQUUsbUJBQW1CO1FBQzdCMW9CLEtBQUssRUFBRTtRQUNQO01BQ0osQ0FBQztNQUNEa2UsT0FBTyxFQUFFO1FBQ0w5UixNQUFNLEVBQUU7TUFDWixDQUFDO01BQ0RuVyxJQUFJLEVBQUU7SUFDVixDQUFDO0lBRUR2SCxLQUFBLENBQUs0c0IsTUFBTSxHQUFHdUMsc0VBQWMsQ0FBQ252QixLQUFBLENBQUt1ckIsUUFBUSxFQUFFam9CLE9BQU8sQ0FBQztJQUVwRHRELEtBQUEsQ0FBSzg2QixZQUFZLE1BQUFyOUIsTUFBQSxDQUFNdUMsS0FBQSxDQUFLNHNCLE1BQU0sQ0FBQ3dDLE9BQU8sT0FBQTN4QixNQUFBLENBQUl1QyxLQUFBLENBQUs0c0IsTUFBTSxDQUFDeUgsU0FBUyxDQUFDd0csR0FBRyxDQUFFO0lBQ3pFNzZCLEtBQUEsQ0FBS2k2QixnQkFBZ0IsTUFBQXg4QixNQUFBLENBQU11QyxLQUFBLENBQUs0c0IsTUFBTSxDQUFDd0MsT0FBTyxPQUFBM3hCLE1BQUEsQ0FBSXVDLEtBQUEsQ0FBSzRzQixNQUFNLENBQUN5SCxTQUFTLENBQUMyRixRQUFRLENBQUU7SUFFbEZoNkIsS0FBQSxDQUFLbWdCLEtBQUssR0FBR3pqQixRQUFRLENBQUNNLGdCQUFnQixDQUFDZ0QsS0FBQSxDQUFLODZCLFlBQVksQ0FBQztJQUN6RDk2QixLQUFBLENBQUtrNkIsYUFBYSxHQUFHeDlCLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUNnRCxLQUFBLENBQUtpNkIsZ0JBQWdCLENBQUM7SUFFckVqNkIsS0FBQSxDQUFLKzZCLGdCQUFnQixDQUFDLENBQUM7SUFBQyxPQUFBLzZCLEtBQUE7RUFDNUI7RUFBQ202QixTQUFBLENBQUEzVSxtQkFBQSxFQUFBc1UsY0FBQTtFQUFBLE9BQUFsNkIsWUFBQSxDQUFBNGxCLG1CQUFBO0lBQUEzbEIsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQWk3QixpQkFBQSxFQUFtQjtNQUNmLElBQUksQ0FBQ1gsYUFBYSxDQUFDLENBQUM7TUFDcEIsSUFBSSxDQUFDWSxZQUFZLENBQUMsQ0FBQztNQUNuQixJQUFJLENBQUNYLHFCQUFxQixDQUFDLENBQUM7SUFDaEM7RUFBQztJQUFBeDZCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFzNkIsY0FBQSxFQUFnQjtNQUNaLElBQUksQ0FBQ0UsaUJBQWlCLEdBQUcsSUFBSSxDQUFDQSxpQkFBaUIsQ0FBQzdOLElBQUksQ0FBQyxJQUFJLENBQUM7TUFDMUQsSUFBSSxDQUFDd08sV0FBVyxHQUFHLElBQUksQ0FBQ0EsV0FBVyxDQUFDeE8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNsRDtFQUFDO0lBQUE1c0IsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQXU2QixzQkFBQSxFQUF3QjtNQUNwQixJQUFNdkssSUFBSSxHQUFHLElBQUk7TUFDakIsSUFBTXlLLFNBQVMsR0FBR3pLLElBQUksQ0FBQ29LLGFBQWE7TUFFcENLLFNBQVMsQ0FBQ3Q5QixPQUFPLENBQUMsVUFBQys4QixRQUFRLEVBQUs7UUFDNUJBLFFBQVEsQ0FBQ3Q4QixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUVveUIsSUFBSSxDQUFDd0ssaUJBQWlCLENBQUM7TUFDL0QsQ0FBQyxDQUFDO0lBQ047RUFBQztJQUFBejZCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFrN0IsYUFBQSxFQUFlO01BQ1gsSUFBTWxMLElBQUksR0FBRyxJQUFJO01BQ2pCLElBQU12cUIsSUFBSSxHQUFHdXFCLElBQUksQ0FBQzNQLEtBQUs7TUFFdkI1YSxJQUFJLENBQUN0SSxPQUFPLENBQUMsVUFBQ3FPLEdBQUcsRUFBSztRQUNsQkEsR0FBRyxDQUFDNU4sZ0JBQWdCLENBQUMsT0FBTyxFQUFFb3lCLElBQUksQ0FBQ21MLFdBQVcsRUFBRTtVQUFFdFUsT0FBTyxFQUFFO1FBQUssQ0FBQyxDQUFDO01BQ3RFLENBQUMsQ0FBQztJQUNOO0VBQUM7SUFBQTltQixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBbTdCLFlBQVlqVyxFQUFFLEVBQUU7TUFDWixJQUFNOEssSUFBSSxHQUFHLElBQUk7TUFDakIsSUFBTWtFLFVBQVUsR0FBR2hQLEVBQUUsQ0FBQ3lMLGFBQWE7TUFDbkMsSUFBTWdLLFlBQVksR0FBQUMsSUFBQSxDQUFBQyxlQUFBLENBQUFuVixtQkFBQSxDQUFBNUIsU0FBQSx3QkFBQUUsSUFBQSxPQUFxQmtRLFVBQVUsQ0FBQztNQUNsRCxJQUFNa0gsZUFBZSxHQUFHbEgsVUFBVSxDQUFDcG9CLE9BQU8sQ0FBQ2trQixJQUFJLENBQUNsRCxNQUFNLENBQUN3QyxPQUFPLENBQUM7TUFDL0QsSUFBTStMLGVBQWUsR0FBR0QsZUFBZSxDQUFDditCLGFBQWEsQ0FBQ216QixJQUFJLENBQUNsRCxNQUFNLENBQUN5SCxTQUFTLENBQUMyRixRQUFRLENBQUM7TUFDckY7O01BRUEsSUFBSVIsUUFBUTtNQUNaLEtBQUssSUFBSXR3QixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdpeUIsZUFBZSxDQUFDNzNCLE9BQU8sQ0FBQ3ZILE1BQU0sRUFBRW1OLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDeEQsSUFBSWl5QixlQUFlLENBQUM3M0IsT0FBTyxDQUFDNEYsQ0FBQyxDQUFDLENBQUNwSixLQUFLLEtBQUsyNkIsWUFBWSxFQUFFO1VBQ25EakIsUUFBUSxHQUFHdHdCLENBQUM7UUFDaEI7TUFDSjs7TUFFQTtNQUNBNG1CLElBQUksQ0FBQ3NMLFlBQVksQ0FBQ3BILFVBQVUsRUFBRXdGLFFBQVEsQ0FBQztNQUN2QzFKLElBQUksQ0FBQ3VMLGNBQWMsQ0FBQ0YsZUFBZSxFQUFFM0IsUUFBUSxDQUFDO01BQzlDa0IsSUFBQSxDQUFBQyxlQUFBLENBQUFuVixtQkFBQSxDQUFBNUIsU0FBQSwyQkFBQUUsSUFBQSxPQUFxQjJXLFlBQVk7SUFDckM7RUFBQztJQUFBNTZCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUF3NkIsa0JBQWtCdFYsRUFBRSxFQUFFO01BQ2xCLElBQU04SyxJQUFJLEdBQUcsSUFBSTtNQUNqQixJQUFNMEssWUFBWSxHQUFHeFYsRUFBRSxDQUFDeUwsYUFBYTtNQUNyQyxJQUFNNkUsWUFBWSxHQUFHa0YsWUFBWSxDQUFDbDNCLE9BQU8sQ0FBQ0MsYUFBYTtNQUV2RCxJQUFNazNCLFlBQVksR0FBR0QsWUFBWSxDQUFDMTZCLEtBQUs7TUFDdkMsSUFBTXc3QixjQUFjLEdBQUc1K0IsUUFBUSxDQUFDQyxhQUFhLEtBQUFjLE1BQUEsQ0FBS3F5QixJQUFJLENBQUNsRCxNQUFNLENBQUNybEIsSUFBSSxRQUFBOUosTUFBQSxDQUFLZzlCLFlBQVksT0FBSSxDQUFDO01BRXhGM0ssSUFBSSxDQUFDdUwsY0FBYyxDQUFDYixZQUFZLEVBQUVsRixZQUFZLENBQUM7TUFDL0N4RixJQUFJLENBQUNzTCxZQUFZLENBQUNFLGNBQWMsQ0FBQztNQUNqQ1osSUFBQSxDQUFBQyxlQUFBLENBQUFuVixtQkFBQSxDQUFBNUIsU0FBQSwyQkFBQUUsSUFBQSxPQUFxQjJXLFlBQVk7SUFDckM7RUFBQztJQUFBNTZCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUF1N0IsZUFBZUUsV0FBVyxFQUFFQyxZQUFZLEVBQUU7TUFDdEMsSUFBTTFMLElBQUksR0FBRyxJQUFJO01BQ2pCLElBQU0wSyxZQUFZLEdBQUdlLFdBQVc7TUFDaEMsSUFBTWpHLFlBQVksR0FBR2tHLFlBQVk7TUFFakMsS0FBSyxJQUFJdHlCLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3N4QixZQUFZLENBQUNsM0IsT0FBTyxDQUFDdkgsTUFBTSxFQUFFbU4sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNyRHN4QixZQUFZLENBQUNsM0IsT0FBTyxDQUFDNEYsQ0FBQyxDQUFDLENBQUM0TyxlQUFlLENBQUMsVUFBVSxDQUFDO01BQ3ZEO01BQ0EwaUIsWUFBWSxDQUFDbDNCLE9BQU8sQ0FBQ2d5QixZQUFZLENBQUMsQ0FBQ3pkLFlBQVksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDO01BQ3ZFMmlCLFlBQVksQ0FBQ2wzQixPQUFPLENBQUNDLGFBQWEsR0FBRyt4QixZQUFZO0lBQ3JEOztJQUVBO0VBQUE7SUFBQXoxQixHQUFBO0lBQUFDLEtBQUEsRUFDQSxTQUFBczdCLGFBQWFLLE9BQU8sRUFBRUMsWUFBWSxFQUFFO01BQ2hDLElBQU01TCxJQUFJLEdBQUcsSUFBSTtNQUNqQixJQUFNa0UsVUFBVSxHQUFHeUgsT0FBTztNQUMxQjNMLElBQUksQ0FBQzZMLFNBQVMsR0FBR0YsT0FBTztNQUN4QixJQUFNUCxlQUFlLEdBQUdsSCxVQUFVLENBQUNwb0IsT0FBTyxDQUFDa2tCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ3dDLE9BQU8sQ0FBQztNQUMvRCxJQUFNN3BCLElBQUksR0FBRzIxQixlQUFlLENBQUNsK0IsZ0JBQWdCLENBQUM4eUIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDeUgsU0FBUyxDQUFDd0csR0FBRyxDQUFDO01BRXhFSCxJQUFBLENBQUFDLGVBQUEsQ0FBQW5WLG1CQUFBLENBQUE1QixTQUFBLDZCQUFBRSxJQUFBLE9BQXVCdmUsSUFBSSxFQUFFLEtBQUs7TUFDbEM7TUFDQW0xQixJQUFBLENBQUFDLGVBQUEsQ0FBQW5WLG1CQUFBLENBQUE1QixTQUFBLDJCQUFBRSxJQUFBLE9BQXFCa1EsVUFBVSxFQUFFLEtBQUs7SUFDMUM7RUFBQztJQUFBbjBCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUE4N0IscUJBQUEsRUFBdUI7TUFDbkIsSUFBTTlMLElBQUksR0FBRyxJQUFJO01BQ2pCLElBQU15SyxTQUFTLEdBQUd6SyxJQUFJLENBQUNvSyxhQUFhO01BQ3BDLElBQU0zMEIsSUFBSSxHQUFHdXFCLElBQUksQ0FBQzNQLEtBQUs7TUFFdkI1YSxJQUFJLENBQUN0SSxPQUFPLENBQUMsVUFBQ3FPLEdBQUcsRUFBSztRQUNsQkEsR0FBRyxDQUFDeW9CLG1CQUFtQixDQUFDLE9BQU8sRUFBRWpFLElBQUksQ0FBQ21MLFdBQVcsQ0FBQztNQUN0RCxDQUFDLENBQUM7TUFFRlYsU0FBUyxDQUFDdDlCLE9BQU8sQ0FBQyxVQUFDKzhCLFFBQVEsRUFBSztRQUM1QkEsUUFBUSxDQUFDakcsbUJBQW1CLENBQUMsUUFBUSxFQUFFakUsSUFBSSxDQUFDd0ssaUJBQWlCLENBQUM7TUFDbEUsQ0FBQyxDQUFDO0lBQ047RUFBQztBQUFBLEVBakk2QlQsc0RBQWE7QUFxSS9DLCtEQUFlclUsbUJBQW1COzs7Ozs7Ozs7Ozs7Ozs7OztJQ3hJNUJxVSxhQUFhO0VBRWYsU0FBQUEsY0FBQSxFQUFjO0lBQUF2NkIsZUFBQSxPQUFBdTZCLGFBQUE7SUFDVixJQUFJLENBQUMzRSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLElBQUksQ0FBQ0ksWUFBWSxHQUFHLENBQUM7SUFDckIsSUFBSSxDQUFDcUcsU0FBUyxHQUFHLElBQUk7SUFDckIsSUFBSSxDQUFDRSxXQUFXLEdBQUcsSUFBSTtFQUMzQjtFQUFDLE9BQUFqOEIsWUFBQSxDQUFBaTZCLGFBQUE7SUFBQWg2QixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBczZCLGNBQUEsRUFBZ0I7TUFDWixJQUFJLENBQUNhLFdBQVcsR0FBRyxJQUFJLENBQUNBLFdBQVcsQ0FBQ3hPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbEQ7RUFBQztJQUFBNXNCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFnOEIsZ0JBQUEsRUFBa0I7TUFDZCxJQUFNaE0sSUFBSSxHQUFHLElBQUk7TUFDakIsSUFBTXZxQixJQUFJLEdBQUd1cUIsSUFBSSxDQUFDM1AsS0FBSztNQUV2QjVhLElBQUksQ0FBQ3RJLE9BQU8sQ0FBQyxVQUFDcU8sR0FBRyxFQUFLO1FBQ2xCQSxHQUFHLENBQUM1TixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUVveUIsSUFBSSxDQUFDbUwsV0FBVyxFQUFFO1VBQUV0VSxPQUFPLEVBQUU7UUFBSyxDQUFDLENBQUM7TUFDdEUsQ0FBQyxDQUFDO0lBQ047RUFBQztJQUFBOW1CLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFpOEIsa0JBQUEsRUFBb0I7TUFDaEIsSUFBTWpNLElBQUksR0FBRyxJQUFJO01BQ2pCLElBQU12cUIsSUFBSSxHQUFHdXFCLElBQUksQ0FBQzNQLEtBQUs7TUFFdkI1YSxJQUFJLENBQUN0SSxPQUFPLENBQUMsVUFBQ3FPLEdBQUcsRUFBSztRQUNsQkEsR0FBRyxDQUFDeW9CLG1CQUFtQixDQUFDLE9BQU8sRUFBRWpFLElBQUksQ0FBQ21MLFdBQVcsQ0FBQztNQUN0RCxDQUFDLENBQUM7SUFDTjtFQUFDO0lBQUFwN0IsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQW03QixZQUFZalcsRUFBRSxFQUFFO01BQ1osSUFBTThLLElBQUksR0FBRyxJQUFJO01BQ2pCLElBQU1rRSxVQUFVLEdBQUdoUCxFQUFFLENBQUN5TCxhQUFhO01BQ25DWCxJQUFJLENBQUM2TCxTQUFTLEdBQUczVyxFQUFFLENBQUN5TCxhQUFhO01BQ2pDLElBQU15SyxlQUFlLEdBQUdsSCxVQUFVLENBQUNwb0IsT0FBTyxDQUFDa2tCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ3dDLE9BQU8sQ0FBQztNQUMvRCxJQUFNN3BCLElBQUksR0FBRzIxQixlQUFlLENBQUNsK0IsZ0JBQWdCLENBQUM4eUIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDeUgsU0FBUyxDQUFDd0csR0FBRyxDQUFDO01BQ3hFLElBQU1KLFlBQVksR0FBRzNLLElBQUksQ0FBQ2tNLFdBQVcsQ0FBQ2hJLFVBQVUsQ0FBQztNQUVqRGxFLElBQUksQ0FBQ21NLGdCQUFnQixDQUFDMTJCLElBQUksRUFBRSxLQUFLLENBQUM7TUFDbEN1cUIsSUFBSSxDQUFDb00sY0FBYyxDQUFDbEksVUFBVSxFQUFFLEtBQUssQ0FBQztNQUN0Q2xFLElBQUksQ0FBQ3FNLGNBQWMsQ0FBQzFCLFlBQVksQ0FBQztJQUNyQztFQUFDO0lBQUE1NkIsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQXE4QixlQUFlaC9CLEtBQUssRUFBRTtNQUNsQixJQUFNMnlCLElBQUksR0FBRyxJQUFJO01BRWpCLElBQUksT0FBTzN5QixLQUFLLEtBQUssV0FBVyxFQUFFO1FBQzlCO01BQ0o7TUFDQSxJQUFNaS9CLGNBQWMsTUFBQTMrQixNQUFBLENBQU1xeUIsSUFBSSxDQUFDbEQsTUFBTSxDQUFDcmxCLElBQUksT0FBQTlKLE1BQUEsQ0FBSU4sS0FBSyxDQUFFO01BQ3JELElBQU1rL0IsWUFBWSxHQUFHMy9CLFFBQVEsQ0FBQ0MsYUFBYSxLQUFBYyxNQUFBLENBQUsyK0IsY0FBYyxDQUFFLENBQUM7TUFDakV0TSxJQUFJLENBQUMrTCxXQUFXLEdBQUdRLFlBQVk7TUFDL0IsSUFBTUMsa0JBQWtCLEdBQUdELFlBQVksQ0FBQ3p3QixPQUFPLENBQUNra0IsSUFBSSxDQUFDbEQsTUFBTSxDQUFDd0MsT0FBTyxDQUFDO01BQ3BFLElBQU03cEIsSUFBSSxHQUFHKzJCLGtCQUFrQixDQUFDdC9CLGdCQUFnQixDQUFDOHlCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ3lILFNBQVMsQ0FBQy9pQixLQUFLLENBQUM7TUFFN0UsSUFBSSxPQUFPK3FCLFlBQVksS0FBSyxXQUFXLEVBQUU7UUFDckM7TUFDSjtNQUVBdk0sSUFBSSxDQUFDd0YsWUFBWSxHQUFHbjRCLEtBQUs7TUFFekIyeUIsSUFBSSxDQUFDbU0sZ0JBQWdCLENBQUMxMkIsSUFBSSxFQUFFLE9BQU8sQ0FBQztNQUNwQ3VxQixJQUFJLENBQUNvTSxjQUFjLENBQUNHLFlBQVksRUFBRSxPQUFPLENBQUM7TUFDMUN2TSxJQUFJLENBQUNpRyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCO0VBQUM7SUFBQWwyQixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBazhCLFlBQVk3K0IsS0FBSyxFQUFFO01BQ2YsSUFBTTJ5QixJQUFJLEdBQUcsSUFBSTtNQUNqQixJQUFNeU0sTUFBTSxHQUFHcC9CLEtBQUssQ0FBQ2dRLFlBQVksQ0FBQzJpQixJQUFJLENBQUNsRCxNQUFNLENBQUNybEIsSUFBSSxDQUFDO01BQ25ELE9BQU9nMUIsTUFBTTtJQUNqQjtFQUFDO0lBQUExOEIsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQW04QixpQkFBaUIxMkIsSUFBSSxFQUFFaTNCLE9BQU8sRUFBRTtNQUM1QixJQUFNMU0sSUFBSSxHQUFHLElBQUk7TUFDakJ2cUIsSUFBSSxDQUFDdEksT0FBTyxDQUFDLFVBQUNxTyxHQUFHLEVBQUs7UUFDbEJBLEdBQUcsQ0FBQ3hOLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDOHhCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQzRDLE9BQU8sQ0FBQzlSLE1BQU0sQ0FBQztRQUVoRCxJQUFJOGUsT0FBTyxLQUFLLE9BQU8sRUFBRTtVQUNyQmx4QixHQUFHLENBQUN1TSxZQUFZLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQztRQUN6QztRQUNBLElBQUkya0IsT0FBTyxLQUFLLEtBQUssRUFBRTtVQUNuQmx4QixHQUFHLENBQUN1TSxZQUFZLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQztRQUM1QztNQUNKLENBQUMsQ0FBQztJQUNOO0VBQUM7SUFBQWhZLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFvOEIsZUFBZTMyQixJQUFJLEVBQUVpM0IsT0FBTyxFQUFFO01BQzFCLElBQU0xTSxJQUFJLEdBQUcsSUFBSTtNQUNqQnZxQixJQUFJLENBQUN6SCxTQUFTLENBQUNNLEdBQUcsQ0FBQzB4QixJQUFJLENBQUNsRCxNQUFNLENBQUM0QyxPQUFPLENBQUM5UixNQUFNLENBQUM7TUFDOUMsSUFBSThlLE9BQU8sS0FBSyxPQUFPLEVBQUU7UUFDckJqM0IsSUFBSSxDQUFDc1MsWUFBWSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUM7TUFDM0M7TUFDQSxJQUFJMmtCLE9BQU8sS0FBSyxLQUFLLEVBQUU7UUFDbkJqM0IsSUFBSSxDQUFDc1MsWUFBWSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUM7TUFDNUM7SUFDSjtFQUFDO0lBQUFoWSxHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBMjhCLGVBQUEsRUFBc0I7TUFBQSxJQUFQdnpCLENBQUMsR0FBQWpCLFNBQUEsQ0FBQWxNLE1BQUEsUUFBQWtNLFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsQ0FBQztNQUNoQixJQUFNNm5CLElBQUksR0FBRyxJQUFJO01BQ2pCLElBQU11SCxLQUFLLEdBQUd2SCxJQUFJLENBQUMzUCxLQUFLO01BQ3hCLElBQU02VCxVQUFVLEdBQUdxRCxLQUFLLENBQUNudUIsQ0FBQyxDQUFDO01BQzNCLElBQU1neUIsZUFBZSxHQUFHbEgsVUFBVSxDQUFDcG9CLE9BQU8sQ0FBQ2trQixJQUFJLENBQUNsRCxNQUFNLENBQUN3QyxPQUFPLENBQUM7TUFDL0QsSUFBTTdwQixJQUFJLEdBQUcyMUIsZUFBZSxDQUFDbCtCLGdCQUFnQixDQUFDOHlCLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ3lILFNBQVMsQ0FBQ3dHLEdBQUcsQ0FBQztNQUN4RSxJQUFNSixZQUFZLEdBQUczSyxJQUFJLENBQUNrTSxXQUFXLENBQUNoSSxVQUFVLENBQUM7TUFFakRsRSxJQUFJLENBQUNtTSxnQkFBZ0IsQ0FBQzEyQixJQUFJLEVBQUUsS0FBSyxDQUFDO01BQ2xDdXFCLElBQUksQ0FBQ29NLGNBQWMsQ0FBQ2xJLFVBQVUsRUFBRSxLQUFLLENBQUM7TUFDdENsRSxJQUFJLENBQUNxTSxjQUFjLENBQUMxQixZQUFZLENBQUM7SUFDckM7RUFBQztJQUFBNTZCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUE2RSxHQUFHK3dCLE1BQU0sRUFBRTFMLFFBQVEsRUFBRTtNQUNqQixJQUFNOEYsSUFBSSxHQUFHLElBQUk7TUFDakIsSUFBSSxPQUFPOUYsUUFBUSxLQUFLLFVBQVUsRUFBRTtNQUVwQzBMLE1BQU0sQ0FBQzEwQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMvRCxPQUFPLENBQUMsVUFBQ1UsS0FBSyxFQUFFdUwsQ0FBQyxFQUFLO1FBQ3BDLElBQUksQ0FBQzRtQixJQUFJLENBQUNvRixlQUFlLENBQUN2M0IsS0FBSyxDQUFDLEVBQUVteUIsSUFBSSxDQUFDb0YsZUFBZSxDQUFDdjNCLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDbEVteUIsSUFBSSxDQUFDb0YsZUFBZSxDQUFDdjNCLEtBQUssQ0FBQyxDQUFDNEcsSUFBSSxDQUFDeWxCLFFBQVEsQ0FBQztNQUM5QyxDQUFDLENBQUM7SUFDTjtFQUFDO0lBQUFucUIsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQTYxQixJQUFJRCxNQUFNLEVBQUVFLE9BQU8sRUFBRTtNQUNqQixJQUFNOUYsSUFBSSxHQUFHLElBQUk7TUFDakIsSUFBSSxDQUFDQSxJQUFJLENBQUNvRixlQUFlLEVBQUU7TUFDM0JRLE1BQU0sQ0FBQzEwQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMvRCxPQUFPLENBQUMsVUFBQ1UsS0FBSyxFQUFLO1FBQ2pDLElBQUksT0FBT2k0QixPQUFPLEtBQUssV0FBVyxFQUFFO1VBQ2hDOUYsSUFBSSxDQUFDb0YsZUFBZSxDQUFDdjNCLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDcEMsQ0FBQyxNQUFNLElBQUlteUIsSUFBSSxDQUFDb0YsZUFBZSxDQUFDdjNCLEtBQUssQ0FBQyxFQUFFO1VBQ3BDbXlCLElBQUksQ0FBQ29GLGVBQWUsQ0FBQ3YzQixLQUFLLENBQUMsQ0FBQ1YsT0FBTyxDQUFDLFVBQUM0NEIsWUFBWSxFQUFFMTRCLEtBQUssRUFBSztZQUN6RCxJQUFJMDRCLFlBQVksS0FBS0QsT0FBTyxFQUFFO2NBQzFCOUYsSUFBSSxDQUFDb0YsZUFBZSxDQUFDdjNCLEtBQUssQ0FBQyxDQUFDbTRCLE1BQU0sQ0FBQzM0QixLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ2hEO1VBQ0osQ0FBQyxDQUFDO1FBQ047TUFDSixDQUFDLENBQUM7SUFDTjtFQUFDO0lBQUEwQyxHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBaTJCLEtBQUEsRUFBYztNQUNWLElBQU1qRyxJQUFJLEdBQUcsSUFBSTtNQUVqQixJQUFJLENBQUNBLElBQUksQ0FBQ29GLGVBQWUsRUFBRSxPQUFPcEYsSUFBSTtNQUN0QyxJQUFJNEYsTUFBTTtNQUNWLElBQUludUIsSUFBSTtNQUNSLElBQUl5dUIsT0FBTztNQUFDLFNBQUFDLElBQUEsR0FBQWh1QixTQUFBLENBQUFsTSxNQUFBLEVBTlJtNkIsSUFBSSxPQUFBdlMsS0FBQSxDQUFBc1MsSUFBQSxHQUFBRSxJQUFBLE1BQUFBLElBQUEsR0FBQUYsSUFBQSxFQUFBRSxJQUFBO1FBQUpELElBQUksQ0FBQUMsSUFBQSxJQUFBbHVCLFNBQUEsQ0FBQWt1QixJQUFBO01BQUE7TUFRUixJQUFJLE9BQU9ELElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLElBQUl2UyxLQUFLLENBQUN5UyxPQUFPLENBQUNGLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3ZEUixNQUFNLEdBQUdRLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDaEIzdUIsSUFBSSxHQUFHMnVCLElBQUksQ0FBQ3JTLEtBQUssQ0FBQyxDQUFDLEVBQUVxUyxJQUFJLENBQUNuNkIsTUFBTSxDQUFDO1FBQ2pDaTZCLE9BQU8sR0FBR2xHLElBQUk7TUFDbEIsQ0FBQyxNQUFNO1FBQ0g0RixNQUFNLEdBQUdRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ1IsTUFBTTtRQUN2Qm51QixJQUFJLEdBQUcydUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDM3VCLElBQUk7UUFDbkJ5dUIsT0FBTyxHQUFHRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNGLE9BQU8sSUFBSWxHLElBQUk7TUFDckM7O01BRUE7TUFDQXZvQixJQUFJLENBQUM4dUIsT0FBTyxDQUFDTCxPQUFPLENBQUM7TUFDckIsSUFBTU0sV0FBVyxHQUFHM1MsS0FBSyxDQUFDeVMsT0FBTyxDQUFDVixNQUFNLENBQUMsR0FBR0EsTUFBTSxHQUFHQSxNQUFNLENBQUMxMEIsS0FBSyxDQUFDLEdBQUcsQ0FBQztNQUV0RXMxQixXQUFXLENBQUNyNUIsT0FBTyxDQUFDLFVBQUNVLEtBQUssRUFBSztRQUMzQixJQUFJbXlCLElBQUksQ0FBQ29GLGVBQWUsSUFBSXBGLElBQUksQ0FBQ29GLGVBQWUsQ0FBQ3YzQixLQUFLLENBQUMsRUFBRTtVQUNyRG15QixJQUFJLENBQUNvRixlQUFlLENBQUN2M0IsS0FBSyxDQUFDLENBQUNWLE9BQU8sQ0FBQyxVQUFDNDRCLFlBQVksRUFBSztZQUNsREEsWUFBWSxDQUFDVSxLQUFLLENBQUNQLE9BQU8sRUFBRXp1QixJQUFJLENBQUM7VUFDckMsQ0FBQyxDQUFDO1FBQ047TUFDSixDQUFDLENBQUM7SUFDTjtFQUFDO0FBQUE7QUFJTCwrREFBZXN5QixhQUFhOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzFLa0I7QUFDTDtBQUNLO0FBQUEsSUFHeENoWSx3QkFBd0I7RUFDMUIsU0FBQUEseUJBQVlyVCxRQUFRLEVBQUU7SUFBQWxQLGVBQUEsT0FBQXVpQix3QkFBQTtJQUNsQixJQUFJLENBQUNDLFFBQVEsR0FBRyxhQUFhO0lBQzdCLElBQUksQ0FBQ0MsY0FBYyxHQUFHLHlCQUF5QjtJQUMvQyxJQUFJLENBQUNDLFdBQVcsR0FBR3RsQixRQUFRLENBQUNNLGdCQUFnQixDQUFDLElBQUksQ0FBQytrQixjQUFjLENBQUM7SUFFakUsSUFBSSxDQUFDMmEsVUFBVSxHQUFHO01BQ2R0TixPQUFPLEVBQVMsa0JBQWtCO01BQ2xDaUYsU0FBUyxFQUFFO1FBQ1B3RyxHQUFHLEVBQVMsbUJBQW1CO1FBQy9CdnBCLEtBQUssRUFBTztRQUNaO01BQ0o7SUFDSixDQUFDO0lBQ0QsSUFBSSxDQUFDOEksZ0JBQWdCLEdBQUc7TUFDcEJpYSxTQUFTLEVBQUU7UUFDUG4zQixJQUFJLEVBQVEsZ0JBQWdCO1FBQzVCNk8sT0FBTyxFQUFLLGdCQUFnQjtRQUM1QjZJLE9BQU8sRUFBSztNQUNoQixDQUFDO01BQ0RpZ0IsR0FBRyxFQUFHO1FBQ0Z0RixLQUFLLEVBQVcsSUFBSTtRQUNwQnVGLE1BQU0sRUFBVTtNQUNwQixDQUFDO01BQ0R0RixPQUFPLEVBQUU7UUFDTHJNLE9BQU8sRUFBTztNQUNsQixDQUFDO01BQ0RxUixTQUFTLEVBQUU7UUFDUDVmLE9BQU8sRUFBSztNQUNoQjtJQUNKLENBQUM7SUFDRCxJQUFJLENBQUM4YyxRQUFRLEdBQUcsS0FBSztJQUNyQixJQUFJLENBQUNDLFNBQVMsR0FBRyxLQUFLO0lBRXRCLElBQUksQ0FBQ2dMLGlCQUFpQjtJQUN0QixJQUFJLENBQUNDLFdBQVc7SUFFaEIsSUFBRyxPQUFPcHVCLFFBQVEsS0FBSyxXQUFXLEVBQUU7TUFDaEMsSUFBSSxDQUFDc1QsUUFBUSxHQUFHdFQsUUFBUTtJQUM1QjtJQUVBLElBQUksQ0FBQzdPLElBQUksQ0FBQyxDQUFDO0VBQ2Y7RUFBQyxPQUFBQyxZQUFBLENBQUFpaUIsd0JBQUE7SUFBQWhpQixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBSCxLQUFBLEVBQU87TUFDSCxJQUFJbXdCLElBQUksR0FBRyxJQUFJO01BQ2YsSUFBSTlPLFlBQVksR0FBR2hpQixNQUFNLENBQUN1YSxVQUFVO01BQ3BDeUgsWUFBWSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMwUSxRQUFRLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQ0MsU0FBUyxHQUFHLElBQUk7TUFFbEUsSUFBRzdCLElBQUksQ0FBQzRCLFFBQVEsRUFBRTVCLElBQUksQ0FBQytNLGNBQWMsQ0FBQyxDQUFDO01BQ3ZDLElBQUcvTSxJQUFJLENBQUM2QixTQUFTLEVBQUU3QixJQUFJLENBQUNnTixRQUFRLENBQUMsQ0FBQztNQUVsQzk5QixNQUFNLENBQUN0QixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsWUFBTTtRQUNwQ295QixJQUFJLENBQUNwTCxjQUFjLENBQUMsQ0FBQztNQUN6QixDQUFDLENBQUM7TUFHRixJQUFJLENBQUNBLGNBQWMsR0FBR1AseURBQVcsQ0FBQyxZQUFNO1FBQ3BDMkwsSUFBSSxDQUFDaU4saUJBQWlCLENBQUMsQ0FBQztNQUM1QixDQUFDLEVBQUUsR0FBRyxDQUFDO01BR1BqTixJQUFJLENBQUNpTixpQkFBaUIsQ0FBQyxDQUFDO0lBQzVCO0VBQUM7SUFBQWw5QixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBaTlCLGtCQUFBLEVBQW9CO01BQ2hCLElBQUlqTixJQUFJLEdBQUcsSUFBSTtNQUNmLElBQUk3TSxRQUFRLEdBQUdqa0IsTUFBTSxDQUFDdWEsVUFBVTtNQUVoQyxJQUFHMEosUUFBUSxHQUFHLElBQUksRUFBRTtRQUNoQixJQUFHLENBQUM2TSxJQUFJLENBQUM0QixRQUFRLEVBQUU7VUFDZixJQUFHLE9BQU81QixJQUFJLENBQUM4TSxXQUFXLEtBQUssV0FBVyxFQUFFO1lBQ3hDOU0sSUFBSSxDQUFDOE0sV0FBVyxDQUFDYixpQkFBaUIsQ0FBQyxDQUFDO1lBQ3BDak0sSUFBSSxDQUFDOE0sV0FBVyxHQUFHMTBCLFNBQVM7VUFDaEM7VUFDQTRuQixJQUFJLENBQUMrTSxjQUFjLENBQUMsQ0FBQztVQUNyQi9NLElBQUksQ0FBQzZCLFNBQVMsR0FBRyxLQUFLO1VBQ3RCN0IsSUFBSSxDQUFDNEIsUUFBUSxHQUFHLElBQUk7UUFDeEI7TUFDSixDQUFDLE1BQ0k7UUFDRCxJQUFHLENBQUM1QixJQUFJLENBQUM2QixTQUFTLEVBQUU7VUFDaEIsSUFBRyxPQUFPN0IsSUFBSSxDQUFDNk0saUJBQWlCLEtBQUssV0FBVyxFQUFFO1lBQzlDN00sSUFBSSxDQUFDNk0saUJBQWlCLENBQUM3RixxQkFBcUIsQ0FBQyxDQUFDO1lBQzlDaEgsSUFBSSxDQUFDNk0saUJBQWlCLEdBQUd6MEIsU0FBUztVQUN0QztVQUVBNG5CLElBQUksQ0FBQ2dOLFFBQVEsQ0FBQyxDQUFDO1VBQ2ZoTixJQUFJLENBQUM0QixRQUFRLEdBQUcsS0FBSztVQUNyQjVCLElBQUksQ0FBQzZCLFNBQVMsR0FBRyxJQUFJO1FBQ3pCO01BQ0o7SUFDSjtFQUFDO0lBQUE5eEIsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQSs4QixlQUFBLEVBQWlCO01BQ2IsSUFBSSxDQUFDRixpQkFBaUIsR0FBRyxJQUFJNWlCLHVEQUFjLENBQUMsSUFBSSxDQUFDK0gsUUFBUSxFQUFFLElBQUksQ0FBQzFILGdCQUFnQixDQUFDO0lBQ3JGO0VBQUM7SUFBQXZhLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFnOUIsU0FBQSxFQUFXO01BQ1AsSUFBSSxDQUFDSixVQUFVLENBQUN0TixPQUFPLEdBQUcsSUFBSSxDQUFDdE4sUUFBUTtNQUN2QyxJQUFJLENBQUM4YSxXQUFXLEdBQUcsSUFBSXRYLHFEQUFXLENBQUMsSUFBSSxDQUFDb1gsVUFBVSxDQUFDO01BQ25ELElBQUksQ0FBQ0UsV0FBVyxDQUFDSCxjQUFjLENBQUMsQ0FBQztJQUNyQztFQUFDO0FBQUE7QUFHTCwrREFBZTVhLHdCQUF3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5R3ZDO0FBQ0E7QUFDQTtBQUNBO0FBSEEsSUFNTXVELFlBQVk7RUFDZCxTQUFBQSxhQUFBLEVBQWM7SUFBQTlsQixlQUFBLE9BQUE4bEIsWUFBQTtJQUNWLElBQUksQ0FBQ3dILE1BQU0sR0FBRztNQUNWcGUsUUFBUSxFQUFFLGdCQUFnQjtNQUMxQjBRLFVBQVUsRUFBRSxjQUFjO01BQzFCN1QsSUFBSSxFQUFFO1FBQ0ZrcEIsU0FBUyxFQUFFO01BQ2YsQ0FBQztNQUNEc0MsU0FBUyxFQUFHO1FBQ1JyMEIsS0FBSyxFQUFFLGdCQUFnQjtRQUN2Qm9TLE9BQU8sRUFBRTtNQUNiLENBQUM7TUFDRGltQixHQUFHLEVBQUU7UUFDRDM5QixJQUFJLEVBQUU7TUFDVjtJQUNKLENBQUM7SUFFRCxJQUFJLENBQUNzUixRQUFRLE1BQUEvUSxNQUFBLENBQU0sSUFBSSxDQUFDbXZCLE1BQU0sQ0FBQzFOLFVBQVUsT0FBQXpoQixNQUFBLENBQUksSUFBSSxDQUFDbXZCLE1BQU0sQ0FBQ2lPLEdBQUcsQ0FBQzM5QixJQUFJLENBQUU7SUFDcEU7O0lBRUMsSUFBSSxDQUFDaWpCLEtBQUssR0FBR3pqQixRQUFRLENBQUNNLGdCQUFnQixDQUFDLElBQUksQ0FBQ3dSLFFBQVEsQ0FBQzs7SUFFckQ7O0lBRUEsSUFBSSxDQUFDd3VCLElBQUksR0FBRztNQUNSeFIsR0FBRyxFQUFFLEVBQUU7TUFDUHlSLElBQUksRUFBRSxFQUFFO01BQ1I5OUIsSUFBSSxFQUFFLEVBQUU7TUFDUis5QixFQUFFLEVBQUUsRUFBRTtNQUNOL21CLEtBQUssRUFBRSxFQUFFO01BQ1RnbkIsSUFBSSxFQUFFLEVBQUU7TUFDUkMsTUFBTSxFQUFFLEVBQUU7TUFDVkMsS0FBSyxFQUFFLEVBQUU7TUFDVEMsS0FBSyxFQUFFO0lBQ1gsQ0FBQztJQUNELElBQUksQ0FBQ0MsYUFBYSxHQUFHO01BQ2pCLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDTixFQUFFLEVBQUUsQ0FBQyxDQUFDO01BQ04sRUFBRSxFQUFFLENBQUM7TUFDTCxFQUFFLEVBQUU7SUFDUixDQUFDOztJQUVEO0lBQ0EsSUFBSSxDQUFDNTlCLElBQUksQ0FBQyxDQUFDO0VBQ2Y7RUFBQyxPQUFBQyxZQUFBLENBQUF3bEIsWUFBQTtJQUFBdmxCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFILEtBQUEsRUFBTyxDQUVQO0VBQUM7QUFBQTtBQUlMLCtEQUFleWxCLFlBQVk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxRDRCO0FBQ0k7QUFDWDtBQUNxQjtBQUNLOztBQUUxRTtBQUNBO0FBQ0E7QUFDQTtBQUhBLElBS01DLE9BQU87RUFDVCxTQUFBQSxRQUFZb1ksR0FBRyxFQUFFO0lBQUFuK0IsZUFBQSxPQUFBK2xCLE9BQUE7SUFDYixJQUFJLENBQUNwbUIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNoQixJQUFJLENBQUN1UCxRQUFRLEdBQUcsZ0NBQWdDO0lBQ2hELElBQUksQ0FBQ2t2QixjQUFjLEdBQUcsK0JBQStCO0lBRXJELElBQUksQ0FBQ3ZkLEtBQUssR0FBR3pqQixRQUFRLENBQUNNLGdCQUFnQixDQUFDLElBQUksQ0FBQ3dSLFFBQVEsQ0FBQztJQUNyRCxJQUFJLENBQUNtdkIsV0FBVyxHQUFHamhDLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUMsSUFBSSxDQUFDMGdDLGNBQWMsQ0FBQztJQUVqRSxJQUFJLENBQUNELEdBQUcsR0FBR0EsR0FBRztJQUVkLElBQUksQ0FBQzk5QixJQUFJLENBQUMsQ0FBQztFQUNmO0VBQUMsT0FBQUMsWUFBQSxDQUFBeWxCLE9BQUE7SUFBQXhsQixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBSCxLQUFBLEVBQU87TUFDSCxJQUFJbXdCLElBQUksR0FBRyxJQUFJO01BQ2ZBLElBQUksQ0FBQzhOLGFBQWEsR0FBRyxJQUFJLENBQUNDLFNBQVMsQ0FBQ3BSLElBQUksQ0FBQyxJQUFJLENBQUM7TUFDOUNxRCxJQUFJLENBQUNnTyxlQUFlLEdBQUcsSUFBSSxDQUFDQyxXQUFXLENBQUN0UixJQUFJLENBQUMsSUFBSSxDQUFDO01BQ2xEcUQsSUFBSSxDQUFDa08sbUJBQW1CLEdBQUcsSUFBSSxDQUFDQyxlQUFlLENBQUN4UixJQUFJLENBQUMsSUFBSSxDQUFDO01BQzFEcUQsSUFBSSxDQUFDb08sbUJBQW1CLEdBQUcsSUFBSSxDQUFDQyxlQUFlLENBQUMxUixJQUFJLENBQUMsSUFBSSxDQUFDO01BSTFEMEQsa0JBQUEsQ0FBSUwsSUFBSSxDQUFDM1AsS0FBSyxFQUFFbGpCLE9BQU8sQ0FBQyxVQUFDcU8sR0FBRyxFQUFLO1FBQzdCQSxHQUFHLENBQUM1TixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUVveUIsSUFBSSxDQUFDOE4sYUFBYSxDQUFDO01BQ3JELENBQUMsQ0FBQztNQUVGek4sa0JBQUEsQ0FBSUwsSUFBSSxDQUFDNk4sV0FBVyxFQUFFMWdDLE9BQU8sQ0FBQyxVQUFDdUYsS0FBSyxFQUFLO1FBQ3JDQSxLQUFLLENBQUM5RSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUVveUIsSUFBSSxDQUFDZ08sZUFBZSxDQUFDO01BQ3pELENBQUMsQ0FBQztNQUVGOStCLE1BQU0sQ0FBQ3RCLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxZQUFNO1FBQ3BDMGdDLHNCQUFzQixDQUFDLENBQUM7TUFDNUIsQ0FBQyxDQUFDO01BRUYsSUFBTUEsc0JBQXNCLEdBQUdqYSx5REFBVyxDQUFDLFlBQU07UUFDN0MyTCxJQUFJLENBQUNvTyxtQkFBbUIsQ0FBQyxDQUFDO01BQzlCLENBQUMsRUFBRSxHQUFHLENBQUM7TUFFUCxJQUFNRyxzQkFBc0IsR0FBR2xhLHlEQUFXLENBQUMsWUFBTTtRQUM3QzJMLElBQUksQ0FBQ2tPLG1CQUFtQixDQUFDLENBQUM7TUFDOUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQztNQUVQbE8sSUFBSSxDQUFDb08sbUJBQW1CLENBQUMsQ0FBQztJQUM5QjtFQUFDO0lBQUFyK0IsR0FBQTtJQUFBQyxLQUFBLEVBR0QsU0FBQSs5QixVQUFVN1ksRUFBRSxFQUFFO01BQ1YsSUFBSThLLElBQUksR0FBRyxJQUFJO01BQ2Y5SyxFQUFFLENBQUNwbkIsY0FBYyxDQUFDLENBQUM7TUFDbkIsSUFBSXU1QixrQkFBa0IsR0FBR25TLEVBQUUsQ0FBQ3lMLGFBQWE7TUFDekMsSUFBSTZOLE9BQU8sR0FBR25ILGtCQUFrQixDQUFDaHFCLFlBQVksQ0FBQyxlQUFlLENBQUM7TUFFOUQsSUFBSW1xQixXQUFXLEdBQUdILGtCQUFrQixDQUFDdnJCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztNQUVqRSxJQUFJMnlCLFdBQVcsR0FBR3BILGtCQUFrQixDQUFDdnJCLE9BQU8sQ0FBQyxjQUFjLENBQUM7TUFFNUQsSUFBSXVVLEtBQUssR0FBR29lLFdBQVcsQ0FBQ3ZoQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQztNQUU3RCxJQUFHLENBQUNtNkIsa0JBQWtCLENBQUNyNUIsU0FBUyxDQUFDQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQ3REO1FBQ0lvaUIsS0FBSyxDQUFDbGpCLE9BQU8sQ0FBQyxVQUFDQyxJQUFJLEVBQUVnTSxDQUFDLEVBQUs7VUFDdkJoTSxJQUFJLENBQUNZLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDLFdBQVcsQ0FBQztVQUNsQ2QsSUFBSSxDQUFDMmEsWUFBWSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUM7UUFDL0MsQ0FBQyxDQUFDO1FBQ0ZzZixrQkFBa0IsQ0FBQ3I1QixTQUFTLENBQUNNLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDN0MrNEIsa0JBQWtCLENBQUN0ZixZQUFZLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQztNQUM1RDtNQUVBLElBQUkzRyxTQUFTLEdBQUd4VSxRQUFRLENBQUNNLGdCQUFnQixDQUFDLCtCQUErQixDQUFDO01BRTFFa1UsU0FBUyxDQUFDalUsT0FBTyxDQUFDLFVBQUNvTyxJQUFJLEVBQUVuQyxDQUFDLEVBQUs7UUFDM0JtQyxJQUFJLENBQUN2TixTQUFTLENBQUNFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDO1FBQ2hEcU4sSUFBSSxDQUFDd00sWUFBWSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7TUFDNUMsQ0FBQyxDQUFDO01BQ0YzRyxTQUFTLENBQUNqVSxPQUFPLENBQUMsVUFBQ3VoQyxNQUFNLEVBQUV0MUIsQ0FBQyxFQUFLO1FBQzdCLElBQUk4cUIsVUFBVSxHQUFHd0ssTUFBTSxDQUFDcnhCLFlBQVksQ0FBQyxJQUFJLENBQUM7UUFDMUMsSUFBRzZtQixVQUFVLEtBQUtzSyxPQUFPLEVBQUU7VUFDdkJFLE1BQU0sQ0FBQzFnQyxTQUFTLENBQUNNLEdBQUcsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDO1VBQy9Db2dDLE1BQU0sQ0FBQzNtQixZQUFZLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQztRQUMvQztNQUNKLENBQUMsQ0FBQztJQUNOO0VBQUM7SUFBQWhZLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFpK0IsWUFBWS9ZLEVBQUUsRUFBRTtNQUNaLElBQUk4SyxJQUFJLEdBQUcsSUFBSTtNQUNmOUssRUFBRSxDQUFDcG5CLGNBQWMsQ0FBQyxDQUFDO01BRW5CLElBQUl1NUIsa0JBQWtCLEdBQUduUyxFQUFFLENBQUN5TCxhQUFhO01BRXpDLElBQUk2RyxXQUFXLEdBQUdILGtCQUFrQixDQUFDdnJCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztNQUM5RCxJQUFJNnlCLGNBQWMsR0FBR25ILFdBQVcsQ0FBQzM2QixhQUFhLENBQUMsa0JBQWtCLENBQUM7TUFFbEUsSUFBSTA2QixLQUFLLEdBQUczNkIsUUFBUSxDQUFDTSxnQkFBZ0IsQ0FBQywrQkFBK0IsQ0FBQztNQUN0RXE2QixLQUFLLENBQUNwNkIsT0FBTyxDQUFDLFVBQUN1RixLQUFLLEVBQUUwRyxDQUFDLEVBQUs7UUFDeEIsSUFBRzFHLEtBQUssS0FBSzgwQixXQUFXLEVBQUU7VUFDdEIsSUFBRyxDQUFDQSxXQUFXLENBQUN4NUIsU0FBUyxDQUFDQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDOUN1NUIsV0FBVyxDQUFDeDVCLFNBQVMsQ0FBQ00sR0FBRyxDQUFDLFlBQVksQ0FBQztVQUMzQztRQUNKLENBQUMsTUFDSTtVQUNEb0UsS0FBSyxDQUFDMUUsU0FBUyxDQUFDRSxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQ3hDO01BQ0osQ0FBQyxDQUFDO01BRUYsSUFBR3M1QixXQUFXLENBQUN4NUIsU0FBUyxDQUFDQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQzlDO1FBQ0ksSUFBSTA3QixvQkFBb0IsR0FBR2dGLGNBQWMsQ0FBQzNQLFNBQVM7UUFDbkQsSUFBSThLLGdCQUFnQixHQUFHNTZCLE1BQU0sQ0FBQ3lsQixXQUFXLElBQUkvbkIsUUFBUSxDQUFDeVgsZUFBZSxDQUFDdkgsU0FBUztRQUUvRSxJQUFJNGQsUUFBUSxHQUFHaVUsY0FBYyxDQUFDM1AsU0FBUyxHQUFHLEVBQUU7UUFFNUMsSUFBRzhLLGdCQUFnQixHQUFHSCxvQkFBb0IsR0FBRyxFQUFFLEVBQUU7VUFDN0M3UCxtRUFBWSxDQUFFO1lBQ1ZFLEVBQUUsRUFBRVUsUUFBUTtZQUNaVCxRQUFRLEVBQUUsR0FBRztZQUNiRSxNQUFNLEVBQUVyQyxtRUFBY0E7VUFDMUIsQ0FBQyxDQUFDO1VBQ0Y7VUFDQTtVQUNBO1FBQ0o7UUFFQWhELGlFQUFTLENBQUM2WixjQUFjLENBQUM7UUFDekJuSCxXQUFXLENBQUN4NUIsU0FBUyxDQUFDRSxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ3pDczVCLFdBQVcsQ0FBQ3g1QixTQUFTLENBQUNFLE1BQU0sQ0FBQyxZQUFZLENBQUM7TUFDOUMsQ0FBQyxNQUNJO1FBQ0QybUIsbUVBQVcsQ0FBQzhaLGNBQWMsRUFBRTtVQUN4QnRiLE9BQU8sRUFBRTtRQUNiLENBQUMsQ0FBQztRQUNGbVUsV0FBVyxDQUFDeDVCLFNBQVMsQ0FBQ00sR0FBRyxDQUFDLFdBQVcsQ0FBQztNQUcxQztJQUNKO0VBQUM7SUFBQXlCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFtK0IsZ0JBQUEsRUFBa0I7TUFDZCxJQUFJbk8sSUFBSSxHQUFHLElBQUk7TUFDZixJQUFJOU8sWUFBWSxHQUFHaGlCLE1BQU0sQ0FBQ3VhLFVBQVU7TUFFcEMsSUFBSW1sQixTQUFTLEdBQUcsRUFBRTtNQUNsQixJQUFJckgsS0FBSyxHQUFHMzZCLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUMsaUNBQWlDLENBQUM7TUFDeEVxNkIsS0FBSyxDQUFDcDZCLE9BQU8sQ0FBQyxVQUFDdUYsS0FBSyxFQUFFMEcsQ0FBQyxFQUFLO1FBQ3hCLElBQUl5MUIsUUFBUSxHQUFJbjhCLEtBQUssQ0FBQ29KLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvQyxJQUFHK3lCLFFBQVEsQ0FBQzdnQyxTQUFTLENBQUNDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBQztVQUN4QyxJQUFHeS9CLG1GQUFtQixDQUFDaDdCLEtBQUssQ0FBQyxFQUFFO1lBQzNCazhCLFNBQVMsQ0FBQ242QixJQUFJLENBQUMyRSxDQUFDLENBQUM7VUFDckI7UUFDSjtNQUNKLENBQUMsQ0FBQztNQUVGLElBQUkwMUIsYUFBYSxHQUFHRixTQUFTLENBQUMzaUMsTUFBTTtNQUVwQyxJQUFHNmlDLGFBQWEsR0FBRyxDQUFDLEVBQUU7UUFDbEJ2SCxLQUFLLENBQUNwNkIsT0FBTyxDQUFDLFVBQUNDLElBQUksRUFBRStuQixDQUFDLEVBQUs7VUFDdkIsSUFBSTBaLFFBQVEsR0FBR3poQyxJQUFJLENBQUMwTyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7VUFFN0MsSUFBRzh5QixTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUt6WixDQUFDLEVBQUU7WUFDbkIsSUFBRyxDQUFDMFosUUFBUSxDQUFDN2dDLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO2NBQzNDNGdDLFFBQVEsQ0FBQzdnQyxTQUFTLENBQUNNLEdBQUcsQ0FBQyxZQUFZLENBQUM7WUFDeEM7VUFDSixDQUFDLE1BQ0k7WUFDRHVnQyxRQUFRLENBQUM3Z0MsU0FBUyxDQUFDRSxNQUFNLENBQUMsWUFBWSxDQUFDO1VBQzNDO1FBQ0osQ0FBQyxDQUFDO01BQ047SUFDSjtFQUFDO0lBQUE2QixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBcStCLGdCQUFBLEVBQWtCO01BQ2QsSUFBSXJPLElBQUksR0FBRyxJQUFJO01BQ2YsSUFBSTlPLFlBQVksR0FBR2hpQixNQUFNLENBQUN1YSxVQUFVO01BR3BDLElBQUd5SCxZQUFZLEdBQUcsSUFBSSxFQUFFO1FBRXBCLElBQUlxVyxLQUFLLEdBQUczNkIsUUFBUSxDQUFDTSxnQkFBZ0IsQ0FBQyxpQ0FBaUMsQ0FBQztRQUN4RSxJQUFJNmhDLE9BQU8sR0FBRyxDQUFDO1FBQ2Z4SCxLQUFLLENBQUNwNkIsT0FBTyxDQUFDLFVBQUN1RixLQUFLLEVBQUUwRyxDQUFDLEVBQUs7VUFDeEIsSUFBSXkxQixRQUFRLEdBQUluOEIsS0FBSyxDQUFDb0osT0FBTyxDQUFDLGdCQUFnQixDQUFDO1VBQy9DLElBQUcreUIsUUFBUSxDQUFDN2dDLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFDO1lBQ3pDOGdDLE9BQU8sR0FBRzMxQixDQUFDO1VBQ2Y7VUFDQXkxQixRQUFRLENBQUM3Z0MsU0FBUyxDQUFDRSxNQUFNLENBQUMsV0FBVyxDQUFDO1VBQ3RDd0UsS0FBSyxDQUFDakYsS0FBSyxDQUFDNGxCLE9BQU8sR0FBRyxFQUFFO1FBQzVCLENBQUMsQ0FBQztRQUNGLElBQUdrVSxLQUFLLENBQUN0N0IsTUFBTSxHQUFHLENBQUMsRUFBRTtVQUNqQnM3QixLQUFLLENBQUN3SCxPQUFPLENBQUMsQ0FBQ2p6QixPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzlOLFNBQVMsQ0FBQ00sR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUN2RTtRQUVBLElBQUkwZ0MsUUFBUSxHQUFHcGlDLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUMsZ0NBQWdDLENBQUM7UUFDMUU4aEMsUUFBUSxDQUFDN2hDLE9BQU8sQ0FBQyxVQUFDcU8sR0FBRyxFQUFFMlosQ0FBQyxFQUFLO1VBQ3pCM1osR0FBRyxDQUFDeE4sU0FBUyxDQUFDRSxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ3JDLENBQUMsQ0FBQztRQUNGLElBQUc4Z0MsUUFBUSxDQUFDL2lDLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFDcEIraUMsUUFBUSxDQUFDRCxPQUFPLENBQUMsQ0FBQy9nQyxTQUFTLENBQUNNLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDaEQ7UUFHQVksTUFBTSxDQUFDKzBCLG1CQUFtQixDQUFDLFFBQVEsRUFBQ2pFLElBQUksQ0FBQ2tPLG1CQUFtQixDQUFDO01BQ2pFLENBQUMsTUFDSTtRQUNEaC9CLE1BQU0sQ0FBQ3RCLGdCQUFnQixDQUFDLFFBQVEsRUFBRW95QixJQUFJLENBQUNrTyxtQkFBbUIsQ0FBQztNQUMvRDtJQUNKO0VBQUM7QUFBQTtBQUdMLCtEQUFlM1ksT0FBTzs7Ozs7Ozs7Ozs7Ozs7O0FDM05mLFNBQVNILGFBQWFBLENBQUEsRUFBRztFQUUzQixXQUFVcHBCLENBQUMsRUFBRTtJQUNWLFNBQVNpakMsSUFBSUEsQ0FBQSxFQUFFO01BQ1gsSUFBSUMsUUFBUSxHQUFHbGpDLENBQUMsQ0FBQyxxQ0FBcUMsQ0FBQztNQUN2RCxTQUFTbWpDLGVBQWVBLENBQUN6d0IsUUFBUSxFQUFFOUksU0FBUyxFQUFFb04sS0FBSyxFQUFFO1FBQ2pEO1FBQ0EsSUFBSXNaLFFBQVEsR0FBR3R3QixDQUFDLENBQUMwUyxRQUFRLENBQUM7O1FBRTFCO1FBQ0E0ZCxRQUFRLENBQUM5dEIsSUFBSSxDQUFDLFVBQVNuQixLQUFLLEVBQUU7VUFDNUIsSUFBSTJXLE9BQU8sR0FBR2hZLENBQUMsQ0FBQyxJQUFJLENBQUM7VUFDckJxQyxVQUFVLENBQUMsWUFBVztZQUNwQjJWLE9BQU8sQ0FBQ2pWLFFBQVEsQ0FBQzZHLFNBQVMsQ0FBQztVQUM3QixDQUFDLEVBQUVvTixLQUFLLEdBQUczVixLQUFLLENBQUM7UUFDbkIsQ0FBQyxDQUFDO01BQ0o7TUFDRjhoQyxlQUFlLENBQUNELFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDO0lBQzFDO0lBRUFsakMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUM2SSxFQUFFLENBQUUsT0FBTyxFQUFFLFVBQUN2RSxDQUFDLEVBQUs7TUFFdENBLENBQUMsQ0FBQ3hDLGNBQWMsQ0FBQyxDQUFDO01BQ2xCLElBQU15UCxNQUFNLEdBQUd2UixDQUFDLENBQUMsa0JBQWtCLENBQUM7TUFDcEMsSUFBTW9qQyxLQUFLLEdBQUc3eEIsTUFBTSxDQUFDeEQsSUFBSSxDQUFDLFlBQVksQ0FBQztNQUN2QyxJQUFNNEcsS0FBSyxHQUFHcEQsTUFBTSxDQUFDeEQsSUFBSSxDQUFDLFlBQVksQ0FBQztNQUN2QyxJQUFNczFCLE1BQU0sR0FBRzl4QixNQUFNLENBQUN4RCxJQUFJLENBQUMsYUFBYSxDQUFDO01BQ3pDLElBQU04RyxXQUFXLEdBQUc3VSxDQUFDLENBQUMsYUFBYSxDQUFDO01BQ3BDLElBQU1zakMsYUFBYSxHQUFHdGpDLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQztNQUV2RCxJQUFNeUwsSUFBSSxHQUFHO1FBQ1RzSixNQUFNLEVBQUUsaUJBQWlCO1FBQ3pCd3VCLEtBQUssRUFBRUMsRUFBRSxDQUFDRCxLQUFLO1FBQ2ZFLFdBQVcsRUFBRUwsS0FBSztRQUNsQkMsTUFBTSxFQUFOQTtNQUNKLENBQUM7TUFFRHJqQyxDQUFDLENBQUNzTCxJQUFJLENBQUM7UUFDSGtCLEdBQUcsRUFBRWczQixFQUFFLENBQUNFLFFBQVE7UUFDaEJqNEIsSUFBSSxFQUFFQSxJQUFJO1FBQ1Z1SixJQUFJLEVBQUUsTUFBTTtRQUNaQyxVQUFVLEVBQUUsU0FBQUEsV0FBVUMsR0FBRyxFQUFFO1VBQ3ZCM0QsTUFBTSxDQUFDeE8sUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUU5QixDQUFDO1FBQ0Q4SixPQUFPLEVBQUUsU0FBQUEsUUFBVXBCLElBQUksRUFBRTtVQUVyQixJQUFLQSxJQUFJLEVBQUc7WUFFUnpMLENBQUMsQ0FBQzZVLFdBQVcsQ0FBQyxDQUFDOUssTUFBTSxDQUFDMEIsSUFBSSxDQUFDazRCLEtBQUssQ0FBQztZQUNqQ3RoQyxVQUFVLENBQUM0Z0MsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7WUFFdkIxeEIsTUFBTSxDQUFDeEQsSUFBSSxDQUFDLFlBQVksRUFBRXRDLElBQUksQ0FBQzIzQixLQUFLLENBQUM7WUFDckM3eEIsTUFBTSxDQUFDM08sV0FBVyxDQUFDLFNBQVMsQ0FBQztZQUU3QixJQUFJNkksSUFBSSxDQUFDMjNCLEtBQUssSUFBSXp1QixLQUFLLEVBQUU7Y0FDckJwRCxNQUFNLENBQUMvRCxJQUFJLENBQUMsQ0FBQztZQUNqQjtVQUVKLENBQUMsTUFBTTtZQUNIK0QsTUFBTSxDQUFDL0QsSUFBSSxDQUFDLENBQUM7VUFDakI7UUFDSjtNQUNKLENBQUMsQ0FBQztJQUVOLENBQUMsQ0FBQztFQUVOLENBQUMsRUFBQzVFLE1BQU0sQ0FBQztBQUViOzs7Ozs7Ozs7Ozs7OztBQ3JFTyxTQUFTcWlCLFdBQVdBLENBQUEsRUFBRztFQUUxQixJQUFNMlksUUFBUSxHQUFHaGpDLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUMsbUJBQW1CLENBQUM7RUFDL0QwaUMsUUFBUSxDQUFDemlDLE9BQU8sQ0FBQyxVQUFBQyxJQUFJLEVBQUk7SUFDckJBLElBQUksQ0FBQ1EsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFVBQVVDLEtBQUssRUFBRTtNQUM5QztNQUNBLElBQUlBLEtBQUssQ0FBQ2dpQyxPQUFPLEtBQUssRUFBRSxFQUFFO1FBQ3RCemlDLElBQUksQ0FBQ2QsS0FBSyxDQUFDLENBQUM7TUFDaEI7SUFDSixDQUFDLENBQUM7RUFDTixDQUFDLENBQUM7RUFFRixJQUFNd2pDLGdCQUFnQixHQUFHbGpDLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUMsNEJBQTRCLENBQUM7RUFDaEY0aUMsZ0JBQWdCLENBQUMzaUMsT0FBTyxDQUFDLFVBQUFDLElBQUksRUFBSTtJQUM3QkEsSUFBSSxDQUFDUSxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsVUFBVUMsS0FBSyxFQUFFO01BQzlDO01BQ0EsSUFBSUEsS0FBSyxDQUFDZ2lDLE9BQU8sS0FBSyxFQUFFLEVBQUU7UUFDdEJ6aUMsSUFBSSxDQUFDZCxLQUFLLENBQUMsQ0FBQztNQUNoQjtJQUNKLENBQUMsQ0FBQztFQUNOLENBQUMsQ0FBQztBQUVOOzs7Ozs7Ozs7Ozs7Ozs7O0FDckJBLElBQU15akMsVUFBVSxHQUFHLFNBQWJBLFVBQVVBLENBQUl0akMsRUFBRSxFQUFFdWpDLEdBQUcsRUFBSztFQUM1QixJQUFJdmpDLEVBQUUsQ0FBQ21KLFNBQVMsQ0FBQ3hCLEtBQUssQ0FBQyxXQUFXLEdBQUc0N0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ25ELE9BQU8sSUFBSTtFQUNmO0FBQ0osQ0FBQztBQUVELElBQU1DLFVBQVUsR0FBRyxTQUFiQSxVQUFVQSxDQUFJeGpDLEVBQUUsRUFBRXVqQyxHQUFHLEVBQUs7RUFDNUIsSUFBSSxDQUFDdmpDLEVBQUUsQ0FBQ21KLFNBQVMsQ0FBQ3hCLEtBQUssQ0FBQyxXQUFXLEdBQUc0N0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3BEdmpDLEVBQUUsQ0FBQ21KLFNBQVMsSUFBSSxHQUFHLEdBQUdvNkIsR0FBRztFQUM3QjtBQUNKLENBQUM7QUFFRCxJQUFNRSxVQUFVLEdBQUcsU0FBYkEsVUFBVUEsQ0FBSXpqQyxFQUFFLEVBQUV1akMsR0FBRyxFQUFLO0VBQzVCdmpDLEVBQUUsQ0FBQ21KLFNBQVMsR0FBR25KLEVBQUUsQ0FBQ21KLFNBQVMsQ0FBQ3pCLE9BQU8sQ0FBQyxJQUFJd3FCLE1BQU0sQ0FBQyxXQUFXLEdBQUdxUixHQUFHLEdBQUcsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RGLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDZkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS2tDO0FBRWxDLElBQU1HLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQUlDLFdBQVcsRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLGVBQWUsRUFBRUMsSUFBSSxFQUFLO0VBQ3JGLElBQUlDLElBQUksR0FBR3ZoQyxNQUFNLENBQUNpd0IsV0FBVyxJQUFJdnlCLFFBQVEsQ0FBQ3lYLGVBQWUsQ0FBQ0UsWUFBWTtJQUNsRW1zQixlQUFlLEdBQUdOLFdBQVcsQ0FBQ25rQyxNQUFNO0lBQ3BDMGtDLGNBQWM7SUFBRUMsT0FBTztJQUFFQyxXQUFXO0lBQUVDLFVBQVU7SUFBRUMsUUFBUTtJQUFFcmtDLFFBQVE7SUFBRTBNLENBQUM7SUFBRStiLENBQUM7RUFDOUUsS0FBSy9iLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3MzQixlQUFlLEVBQUUsRUFBRXQzQixDQUFDLEVBQUU7SUFDbEMxTSxRQUFRLEdBQUdFLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUNtakMsVUFBVSxDQUFDO0lBQ2hETSxjQUFjLEdBQUdqa0MsUUFBUSxDQUFDVCxNQUFNO0lBQ2hDMmtDLE9BQU8sR0FBR1IsV0FBVyxDQUFDaDNCLENBQUMsQ0FBQyxDQUFDd3dCLHFCQUFxQixDQUFDLENBQUMsQ0FBQ3g2QixHQUFHO0lBQ3BEeWhDLFdBQVcsR0FBRzc1QixJQUFJLENBQUNDLEtBQUssQ0FBRTI1QixPQUFPLEdBQUdILElBQUksR0FBSSxHQUFHLENBQUM7SUFDaERLLFVBQVUsR0FBRzk1QixJQUFJLENBQUNDLEtBQUssQ0FBQzI1QixPQUFPLENBQUM7SUFDaENHLFFBQVEsR0FBR1AsSUFBSSxJQUFJLFNBQVMsR0FBR0ssV0FBVyxHQUFHQyxVQUFVO0lBQ3ZELElBQUlDLFFBQVEsSUFBSVIsZUFBZSxFQUFFO01BQzdCLElBQUksQ0FBQ1IsbUVBQVUsQ0FBQ0ssV0FBVyxDQUFDaDNCLENBQUMsQ0FBQyxFQUFFaTNCLFVBQVUsQ0FBQyxFQUFFO1FBQ3pDLEtBQUtsYixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUd3YixjQUFjLEVBQUUsRUFBRXhiLENBQUMsRUFBRTtVQUNqQyxJQUFJLENBQUM0YSxtRUFBVSxDQUFDcmpDLFFBQVEsQ0FBQ3lvQixDQUFDLENBQUMsRUFBRW1iLFVBQVUsQ0FBQyxFQUFFO1lBQ3RDTCxtRUFBVSxDQUFDdmpDLFFBQVEsQ0FBQ3lvQixDQUFDLENBQUMsRUFBRW1iLFVBQVUsQ0FBQztVQUN2QztRQUNKO01BQ0osQ0FBQyxNQUFNO1FBQ0gsSUFBSSxDQUFDUCxtRUFBVSxDQUFDSyxXQUFXLENBQUNoM0IsQ0FBQyxDQUFDLEVBQUVrM0IsVUFBVSxDQUFDLEVBQUU7VUFDekNMLG1FQUFVLENBQUNHLFdBQVcsQ0FBQ2gzQixDQUFDLENBQUMsRUFBRWszQixVQUFVLENBQUM7UUFDMUM7TUFDSjtJQUNKLENBQUMsTUFBTTtNQUNISixtRUFBVSxDQUFDRSxXQUFXLENBQUNoM0IsQ0FBQyxDQUFDLEVBQUVrM0IsVUFBVSxDQUFDO01BQ3RDLElBQUksQ0FBQ1AsbUVBQVUsQ0FBQ0ssV0FBVyxDQUFDaDNCLENBQUMsQ0FBQyxFQUFFaTNCLFVBQVUsQ0FBQyxFQUFFO1FBQ3pDLEtBQUtsYixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUd3YixjQUFjLEVBQUUsRUFBRXhiLENBQUMsRUFBRTtVQUNqQythLG1FQUFVLENBQUN4akMsUUFBUSxDQUFDeW9CLENBQUMsQ0FBQyxFQUFFbWIsVUFBVSxDQUFDO1FBQ3ZDO01BQ0o7SUFDSjtFQUNKO0FBQ0osQ0FBQztBQUVELElBQU01QyxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUFJamhDLEVBQUUsRUFBSztFQUNoQyxJQUFNMEMsTUFBTSxHQUFHRCxNQUFNLENBQUM4aEMsT0FBTyxJQUFJOWhDLE1BQU0sQ0FBQ3lsQixXQUFXO0VBQ25ELElBQU1zYyxTQUFTLEdBQUd4a0MsRUFBRSxDQUFDbTlCLHFCQUFxQixDQUFDLENBQUMsQ0FBQ3g2QixHQUFHLEdBQUdELE1BQU07RUFFekQsSUFBTStoQyxRQUFRLEdBQUc7SUFDYjloQyxHQUFHLEVBQUVELE1BQU07SUFDWGdpQyxNQUFNLEVBQUVoaUMsTUFBTSxHQUFHRCxNQUFNLENBQUNpd0I7RUFDNUIsQ0FBQztFQUVELElBQU1pUyxNQUFNLEdBQUc7SUFDWGhpQyxHQUFHLEVBQUU2aEMsU0FBUztJQUNkRSxNQUFNLEVBQUVGLFNBQVMsR0FBR3hrQyxFQUFFLENBQUM4WDtFQUMzQixDQUFDO0VBRUQsT0FBUzZzQixNQUFNLENBQUNELE1BQU0sSUFBSUQsUUFBUSxDQUFDOWhDLEdBQUcsSUFBSWdpQyxNQUFNLENBQUNELE1BQU0sSUFBSUQsUUFBUSxDQUFDQyxNQUFNLElBQ2pFQyxNQUFNLENBQUNoaUMsR0FBRyxJQUFJOGhDLFFBQVEsQ0FBQ0MsTUFBTSxJQUFJQyxNQUFNLENBQUNoaUMsR0FBRyxJQUFJOGhDLFFBQVEsQ0FBQzloQyxHQUFLO0FBQzFFLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5REQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTXFzQixRQUFRLEdBQUc7RUFDYnhCLFFBQVEsRUFBRSxHQUFHO0VBQ2JxTyxRQUFRLFdBQUFBLFNBQUEsRUFBRyxDQUVYO0FBQ0osQ0FBQztBQUVELElBQU0rSSxXQUFXLEdBQUcsU0FBZEEsV0FBV0EsQ0FBSTc5QixPQUFPLEVBQUs7RUFDN0IsSUFBSTRtQixLQUFLLEdBQUcsSUFBSXhwQixJQUFJLENBQUQsQ0FBQztFQUNwQixJQUFJK0IsRUFBRSxHQUFHekcsV0FBVyxDQUFDLFlBQVc7SUFDNUIsSUFBSW9sQyxVQUFVLEdBQUcsSUFBSTFnQyxJQUFJLENBQUQsQ0FBQyxHQUFHd3BCLEtBQUs7SUFDakMsSUFBSWxULFFBQVEsR0FBR29xQixVQUFVLEdBQUc5OUIsT0FBTyxDQUFDeW1CLFFBQVE7SUFDNUMsSUFBSS9TLFFBQVEsR0FBRyxDQUFDLEVBQUU7TUFDZEEsUUFBUSxHQUFHLENBQUM7SUFDaEI7SUFDQTFULE9BQU8sQ0FBQzBULFFBQVEsR0FBR0EsUUFBUTtJQUMzQixJQUFJcXFCLEtBQUssR0FBRy85QixPQUFPLENBQUMrOUIsS0FBSyxDQUFDcnFCLFFBQVEsQ0FBQztJQUNuQzFULE9BQU8sQ0FBQ2crQixJQUFJLENBQUNELEtBQUssQ0FBQztJQUNuQixJQUFJcnFCLFFBQVEsSUFBSSxDQUFDLEVBQUU7TUFDZjZXLGFBQWEsQ0FBQ3ByQixFQUFFLENBQUM7TUFDakIsSUFBRyxPQUFPYSxPQUFPLENBQUM4MEIsUUFBUSxLQUFLLFVBQVUsRUFDekM7UUFDSTkwQixPQUFPLENBQUM4MEIsUUFBUSxDQUFDLENBQUM7TUFDdEI7SUFDSjtFQUNKLENBQUMsRUFBRTkwQixPQUFPLENBQUN3UCxLQUFLLElBQUksRUFBRSxDQUFDO0FBQzNCLENBQUM7QUFFTSxJQUFNcWhCLFFBQVEsR0FBRyxTQUFYQSxRQUFRQSxDQUFJcmdCLE9BQU8sRUFBa0I7RUFBQSxJQUFoQnhRLE9BQU8sR0FBQTJFLFNBQUEsQ0FBQWxNLE1BQUEsUUFBQWtNLFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUUsQ0FBQyxDQUFDO0VBQ3pDLElBQUcsT0FBTzNFLE9BQU8sQ0FBQ3ltQixRQUFRLEtBQUssV0FBVyxFQUFFO0lBQ3hDem1CLE9BQU8sQ0FBQ3ltQixRQUFRLEdBQUd3QixRQUFRLENBQUN4QixRQUFRO0VBQ3hDO0VBQ0EsSUFBSUQsRUFBRSxHQUFHLENBQUM7RUFDVnFYLFdBQVcsQ0FBQztJQUNScFgsUUFBUSxFQUFFem1CLE9BQU8sQ0FBQ3ltQixRQUFRO0lBQzFCc1gsS0FBSyxXQUFBQSxNQUFDcnFCLFFBQVEsRUFBRTtNQUNaQSxRQUFRLEdBQUcsSUFBSSxDQUFDQSxRQUFRO01BQ3hCLE9BQU91cUIsT0FBTyxDQUFDQyxLQUFLLENBQUN4cUIsUUFBUSxDQUFDO0lBQ2xDLENBQUM7SUFDRG9oQixRQUFRLEVBQUU5MEIsT0FBTyxDQUFDODBCLFFBQVE7SUFDMUJrSixJQUFJLFdBQUFBLEtBQUNELEtBQUssRUFBRTtNQUNSdnRCLE9BQU8sQ0FBQ3ZXLEtBQUssQ0FBQzBMLE9BQU8sR0FBRzZnQixFQUFFLEdBQUd1WCxLQUFLO0lBQ3RDO0VBQ0osQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUVNLElBQU1qTixTQUFTLEdBQUcsU0FBWkEsU0FBU0EsQ0FBSXRnQixPQUFPLEVBQW1CO0VBQUEsSUFBakJ4USxPQUFPLEdBQUEyRSxTQUFBLENBQUFsTSxNQUFBLFFBQUFrTSxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUMzQyxJQUFHLE9BQU8zRSxPQUFPLENBQUN5bUIsUUFBUSxLQUFLLFdBQVcsRUFBRTtJQUN4Q3ptQixPQUFPLENBQUN5bUIsUUFBUSxHQUFHd0IsUUFBUSxDQUFDeEIsUUFBUTtFQUN4QztFQUNBLElBQUlELEVBQUUsR0FBRyxDQUFDO0VBQ1ZxWCxXQUFXLENBQUM7SUFDUnBYLFFBQVEsRUFBRXptQixPQUFPLENBQUN5bUIsUUFBUTtJQUMxQnNYLEtBQUssV0FBQUEsTUFBQ3JxQixRQUFRLEVBQUU7TUFDWkEsUUFBUSxHQUFHLElBQUksQ0FBQ0EsUUFBUTtNQUN4QixPQUFPdXFCLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDeHFCLFFBQVEsQ0FBQztJQUNsQyxDQUFDO0lBQ0RvaEIsUUFBUSxFQUFFOTBCLE9BQU8sQ0FBQzgwQixRQUFRO0lBQzFCa0osSUFBSSxXQUFBQSxLQUFDRCxLQUFLLEVBQUU7TUFDUnZ0QixPQUFPLENBQUN2VyxLQUFLLENBQUMwTCxPQUFPLEdBQUc2Z0IsRUFBRSxHQUFHdVgsS0FBSztJQUN0QztFQUNKLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRCxJQUFNRSxPQUFPLEdBQUc7RUFDWkUsTUFBTSxFQUFFLFNBQUFBLE9BQVN6cUIsUUFBUSxFQUFFO0lBQ3ZCLE9BQU9BLFFBQVE7RUFDbkIsQ0FBQztFQUNEMHFCLFNBQVMsRUFBRSxTQUFBQSxVQUFTMXFCLFFBQVEsRUFBRTtJQUMxQixPQUFPbFEsSUFBSSxDQUFDeWhCLEdBQUcsQ0FBQ3ZSLFFBQVEsRUFBRSxDQUFDLENBQUM7RUFDaEMsQ0FBQztFQUNEd3FCLEtBQUssRUFBRSxTQUFBQSxNQUFTeHFCLFFBQVEsRUFBRTtJQUN0QixPQUFPLEdBQUcsR0FBR2xRLElBQUksQ0FBQ21oQixHQUFHLENBQUNqUixRQUFRLEdBQUdsUSxJQUFJLENBQUNvaEIsRUFBRSxDQUFDLEdBQUcsQ0FBQztFQUNqRCxDQUFDO0VBQ0R5WixJQUFJLEVBQUUsU0FBQUEsS0FBUzNxQixRQUFRLEVBQUU7SUFDckIsT0FBTyxDQUFDLEdBQUdsUSxJQUFJLENBQUNzaEIsR0FBRyxDQUFDdGhCLElBQUksQ0FBQzg2QixJQUFJLENBQUM1cUIsUUFBUSxDQUFDLENBQUM7RUFDNUMsQ0FBQztFQUNENnFCLElBQUksRUFBRSxTQUFBQSxLQUFTN3FCLFFBQVEsRUFBRThxQixDQUFDLEVBQUU7SUFDeEIsT0FBT2g3QixJQUFJLENBQUN5aEIsR0FBRyxDQUFDdlIsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUM4cUIsQ0FBQyxHQUFHLENBQUMsSUFBSTlxQixRQUFRLEdBQUc4cUIsQ0FBQyxDQUFDO0VBQzNELENBQUM7RUFDREMsTUFBTSxFQUFFLFNBQUFBLE9BQVMvcUIsUUFBUSxFQUFFO0lBQ3ZCLEtBQUssSUFBSWlTLENBQUMsR0FBRyxDQUFDLEVBQUUvQixDQUFDLEdBQUcsQ0FBQyxFQUFFeGMsTUFBTSxFQUFFLENBQUMsRUFBRXVlLENBQUMsSUFBSS9CLENBQUMsRUFBRUEsQ0FBQyxJQUFJLENBQUMsRUFBRTtNQUM5QyxJQUFJbFEsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBR2lTLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDOUIsT0FBTyxDQUFDbmlCLElBQUksQ0FBQ3loQixHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHVSxDQUFDLEdBQUcsRUFBRSxHQUFHalMsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBR2xRLElBQUksQ0FBQ3loQixHQUFHLENBQUNyQixDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQzFFO0lBQ0o7RUFDSixDQUFDO0VBQ0Q4YSxPQUFPLEVBQUUsU0FBQUEsUUFBU2hyQixRQUFRLEVBQUU4cUIsQ0FBQyxFQUFFO0lBQzNCLE9BQU9oN0IsSUFBSSxDQUFDeWhCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJdlIsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUdsUSxJQUFJLENBQUNtaEIsR0FBRyxDQUFDLEVBQUUsR0FBR25oQixJQUFJLENBQUNvaEIsRUFBRSxHQUFHNFosQ0FBQyxHQUFHLENBQUMsR0FBRzlxQixRQUFRLENBQUM7RUFDdkY7QUFDSixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FDbEpxQzs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU15YyxlQUFlLEdBQUcsU0FBbEJBLGVBQWVBLENBQUEsRUFBUztFQUMxQixPQUNJLENBQUMsRUFBRSxPQUFPejBCLE1BQU0sS0FBSyxXQUFXLEtBQzNCLGNBQWMsSUFBSUEsTUFBTSxJQUNwQkEsTUFBTSxDQUFDaWpDLGFBQWEsSUFDakIsT0FBT3ZsQyxRQUFRLEtBQUssV0FBVyxJQUMvQkEsUUFBUSxZQUFZc0MsTUFBTSxDQUFDaWpDLGFBQWMsQ0FBQyxDQUFDLElBQ3ZELENBQUMsRUFBRSxPQUFPN3NCLFNBQVMsS0FBSyxXQUFXLEtBQzlCQSxTQUFTLENBQUNDLGNBQWMsSUFBSUQsU0FBUyxDQUFDRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBRXJFLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsSUFBTTRzQixlQUFlLEdBQUcsU0FBbEJBLGVBQWVBLENBQUEsRUFBUztFQUMxQixJQUFJQyxLQUFLLEdBQUcxTyxlQUFlLENBQUMsQ0FBQztFQUM3QixJQUFJNXFCLElBQUksR0FBR25NLFFBQVEsQ0FBQzBsQyxvQkFBb0IsQ0FBRSxNQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7O0VBRXJEO0VBQ0EsSUFBSUQsS0FBSyxFQUFFO0lBQ1B0NUIsSUFBSSxDQUFDL0ssU0FBUyxDQUFDRSxNQUFNLENBQUMsaUJBQWlCLENBQUM7SUFDeEM2SyxJQUFJLENBQUMvSyxTQUFTLENBQUNNLEdBQUcsQ0FBQyxjQUFjLENBQUM7RUFDdEMsQ0FBQyxNQUNJO0lBQ0R5SyxJQUFJLENBQUMvSyxTQUFTLENBQUNFLE1BQU0sQ0FBQyxjQUFjLENBQUM7SUFDckM2SyxJQUFJLENBQUMvSyxTQUFTLENBQUNNLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztFQUN6QztBQUNKLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU0rbUIsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FBQSxFQUFTO0VBQzNCK2MsZUFBZSxDQUFDLENBQUM7O0VBRWpCO0VBQ0EsSUFBTUcsZUFBZSxHQUFHbGUsbURBQVcsQ0FBQyxZQUFNO0lBQ3RDK2QsZUFBZSxDQUFDLENBQUM7RUFDckIsQ0FBQyxFQUFFLEdBQUcsQ0FBQzs7RUFFUDtFQUNBbGpDLE1BQU0sQ0FBQ3RCLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxZQUFNO0lBQ3BDMmtDLGVBQWUsQ0FBQyxDQUFDO0VBQ3JCLENBQUMsQ0FBQztBQUNOLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3pERCxJQUFNbFQsY0FBYyxHQUFHLFNBQWpCQSxjQUFjQSxDQUFJbVQsV0FBVyxFQUFFQyxNQUFNLEVBQUs7RUFDNUMsS0FBSyxJQUFJQyxRQUFRLElBQUlELE1BQU0sRUFBRTtJQUN6QixJQUFJQSxNQUFNLENBQUNDLFFBQVEsQ0FBQyxJQUFJRCxNQUFNLENBQUNDLFFBQVEsQ0FBQyxDQUFDQyxXQUFXLElBQ2hERixNQUFNLENBQUNDLFFBQVEsQ0FBQyxDQUFDQyxXQUFXLEtBQUt4VyxNQUFNLEVBQUU7TUFDekNxVyxXQUFXLENBQUNFLFFBQVEsQ0FBQyxHQUFHRixXQUFXLENBQUNFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNuRHJULGNBQWMsQ0FBQ21ULFdBQVcsQ0FBQ0UsUUFBUSxDQUFDLEVBQUVELE1BQU0sQ0FBQ0MsUUFBUSxDQUFDLENBQUM7SUFDM0QsQ0FBQyxNQUFNO01BQ0hGLFdBQVcsQ0FBQ0UsUUFBUSxDQUFDLEdBQUdELE1BQU0sQ0FBQ0MsUUFBUSxDQUFDO0lBQzVDO0VBQ0o7RUFDQSxPQUFPRixXQUFXO0FBQ3RCLENBQUM7QUFFRCxJQUFNSSxRQUFRLEdBQUcsU0FBWEEsUUFBUUEsQ0FBSW5YLFFBQVEsRUFBRWpvQixPQUFPLEVBQUs7RUFDcEMsSUFBTXEvQixlQUFlLEdBQUcsQ0FBQyxDQUFDO0VBQzFCLEtBQUssSUFBSTlpQyxHQUFHLElBQUkwckIsUUFBUSxFQUFFO0lBQ3RCb1gsZUFBZSxDQUFDOWlDLEdBQUcsQ0FBQyxHQUFHeUQsT0FBTyxDQUFDekQsR0FBRyxDQUFDLElBQUkwckIsUUFBUSxDQUFDMXJCLEdBQUcsQ0FBQztFQUN4RDtFQUNBLE9BQU84aUMsZUFBZTtBQUMxQixDQUFDO0FBRUQsSUFBTUMsV0FBVyxHQUFHLFNBQWRBLFdBQVdBLENBQUk3L0IsTUFBTSxFQUFFdy9CLE1BQU0sRUFBSztFQUNwQyxJQUFNTSxRQUFRLEdBQUcsU0FBWEEsUUFBUUEsQ0FBSTE1QixHQUFHO0lBQUEsT0FBS0EsR0FBRyxJQUFJMjVCLE9BQUEsQ0FBTzM1QixHQUFHLE1BQUssUUFBUTtFQUFBO0VBRXhELElBQUksQ0FBQzA1QixRQUFRLENBQUM5L0IsTUFBTSxDQUFDLElBQUksQ0FBQzgvQixRQUFRLENBQUNOLE1BQU0sQ0FBQyxFQUFFO0lBQ3hDLE9BQU9BLE1BQU07RUFDakI7RUFFQXRXLE1BQU0sQ0FBQytRLElBQUksQ0FBQ3VGLE1BQU0sQ0FBQyxDQUFDdGxDLE9BQU8sQ0FBQyxVQUFBNEMsR0FBRyxFQUFJO0lBQy9CLElBQU1rakMsV0FBVyxHQUFHaGdDLE1BQU0sQ0FBQ2xELEdBQUcsQ0FBQztJQUMvQixJQUFNbWpDLFdBQVcsR0FBR1QsTUFBTSxDQUFDMWlDLEdBQUcsQ0FBQztJQUUvQixJQUFJOGpCLEtBQUssQ0FBQ3lTLE9BQU8sQ0FBQzJNLFdBQVcsQ0FBQyxJQUFJcGYsS0FBSyxDQUFDeVMsT0FBTyxDQUFDNE0sV0FBVyxDQUFDLEVBQUU7TUFDMURqZ0MsTUFBTSxDQUFDbEQsR0FBRyxDQUFDLEdBQUdrakMsV0FBVyxDQUFDdGxDLE1BQU0sQ0FBQ3VsQyxXQUFXLENBQUM7SUFDakQsQ0FBQyxNQUFNLElBQUlILFFBQVEsQ0FBQ0UsV0FBVyxDQUFDLElBQUlGLFFBQVEsQ0FBQ0csV0FBVyxDQUFDLEVBQUU7TUFDdkRqZ0MsTUFBTSxDQUFDbEQsR0FBRyxDQUFDLEdBQUcraUMsV0FBVyxDQUFDM1csTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU2VyxXQUFXLENBQUMsRUFBRUMsV0FBVyxDQUFDO0lBQzFFLENBQUMsTUFBTTtNQUNIamdDLE1BQU0sQ0FBQ2xELEdBQUcsQ0FBQyxHQUFHbWpDLFdBQVc7SUFDN0I7RUFDSixDQUFDLENBQUM7RUFFRixPQUFPamdDLE1BQU07QUFDakIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRTZDO0FBQ0w7QUFFeEMsSUFBTXdvQixRQUFRLEdBQUc7RUFDYnhCLFFBQVEsRUFBRSxHQUFHO0VBQ2JFLE1BQU0sRUFBRSxTQUFBQSxPQUFDM2EsV0FBVyxFQUFFNHpCLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxTQUFTLEVBQUs7SUFDdkQsT0FBTyxDQUFDRCxTQUFTLElBQUk3ekIsV0FBVyxJQUFJOHpCLFNBQVMsQ0FBQyxJQUFJOXpCLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRzR6QixVQUFVO0VBQ25GLENBQUM7RUFDRC9mLE9BQU8sRUFBRTtBQUNiLENBQUM7QUFDRCxJQUFNa2dCLFVBQVUsR0FBRztFQUNmQyxJQUFJLEVBQUUsQ0FBQztFQUNQQyxLQUFLLEVBQUU7QUFDWCxDQUFDO0FBQ00sSUFBTTNlLFNBQVMsR0FBRyxTQUFaQSxTQUFTQSxDQUFJOVEsT0FBTyxFQUFnQjtFQUFBLElBQWRvaUIsSUFBSSxHQUFBanVCLFNBQUEsQ0FBQWxNLE1BQUEsUUFBQWtNLFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsQ0FBQyxDQUFDO0VBQ3hDLElBQUlnN0IscURBQVcsQ0FBQy9NLElBQUksQ0FBQyxFQUFFO0lBQ25CQSxJQUFJLEdBQUc7TUFBRW5NLFFBQVEsRUFBRW1NO0lBQUssQ0FBQztFQUM3QjtFQUNBLElBQU01eUIsT0FBTyxHQUFHby9CLDBEQUFRLENBQUNuWCxRQUFRLEVBQUUySyxJQUFJLENBQUM7RUFDeEMsSUFBSXNOLFdBQVcsR0FBR2xnQyxPQUFPLENBQUM2ZixPQUFPO0VBQ2pDN2YsT0FBTyxDQUFDcVQsU0FBUyxHQUFHMHNCLFVBQVUsQ0FBQ0UsS0FBSztFQUNwQ2pnQyxPQUFPLENBQUN3bUIsRUFBRSxHQUFHLENBQUM7RUFDZHhtQixPQUFPLENBQUNtZ0MsY0FBYyxHQUFHM3ZCLE9BQU8sQ0FBQ00sWUFBWTtFQUM3QzlRLE9BQU8sQ0FBQ29nQyxjQUFjLEdBQUcsQ0FBQ3BnQyxPQUFPLENBQUNtZ0MsY0FBYztFQUNoREUseUJBQXlCLENBQUM3dkIsT0FBTyxFQUFFMHZCLFdBQVcsQ0FBQztFQUMvQ3hrQyxNQUFNLENBQUM0a0MscUJBQXFCLENBQUMsVUFBQ0MsU0FBUztJQUFBLE9BQUs3NkIsT0FBTyxDQUFDOEssT0FBTyxFQUFFeFEsT0FBTyxFQUFFdWdDLFNBQVMsQ0FBQztFQUFBLEVBQUM7QUFDckYsQ0FBQztBQUNNLElBQU1sZixXQUFXLEdBQUcsU0FBZEEsV0FBV0EsQ0FBSTdRLE9BQU8sRUFBZ0I7RUFBQSxJQUFkb2lCLElBQUksR0FBQWp1QixTQUFBLENBQUFsTSxNQUFBLFFBQUFrTSxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUMxQyxJQUFJZzdCLHFEQUFXLENBQUMvTSxJQUFJLENBQUMsRUFBRTtJQUNuQkEsSUFBSSxHQUFHO01BQUVuTSxRQUFRLEVBQUVtTTtJQUFLLENBQUM7RUFDN0I7RUFDQXBpQixPQUFPLENBQUN2VyxLQUFLLENBQUNGLE1BQU0sR0FBRyxLQUFLO0VBRTVCLElBQU1pRyxPQUFPLEdBQUdvL0IsMERBQVEsQ0FBQ25YLFFBQVEsRUFBRTJLLElBQUksQ0FBQztFQUN4QyxJQUFJc04sV0FBVyxHQUFHbGdDLE9BQU8sQ0FBQzZmLE9BQU87RUFDakN3Z0IseUJBQXlCLENBQUM3dkIsT0FBTyxFQUFFMHZCLFdBQVcsQ0FBQztFQUMvQ2xnQyxPQUFPLENBQUNxVCxTQUFTLEdBQUcwc0IsVUFBVSxDQUFDQyxJQUFJO0VBQ25DaGdDLE9BQU8sQ0FBQ3dtQixFQUFFLEdBQUdoVyxPQUFPLENBQUNNLFlBQVk7RUFDakM5USxPQUFPLENBQUNtZ0MsY0FBYyxHQUFHLENBQUM7RUFDMUJuZ0MsT0FBTyxDQUFDb2dDLGNBQWMsR0FBR3BnQyxPQUFPLENBQUN3bUIsRUFBRTtFQUNuQzlxQixNQUFNLENBQUM0a0MscUJBQXFCLENBQUMsVUFBQ0MsU0FBUztJQUFBLE9BQUs3NkIsT0FBTyxDQUFDOEssT0FBTyxFQUFFeFEsT0FBTyxFQUFFdWdDLFNBQVMsQ0FBQztFQUFBLEVBQUM7QUFFckYsQ0FBQztBQUNELElBQU03NkIsT0FBTyxHQUFHLFNBQVZBLE9BQU9BLENBQUk4SyxPQUFPLEVBQUV4USxPQUFPLEVBQUV3Z0MsR0FBRyxFQUFLO0VBQ3ZDLElBQUksQ0FBQ3hnQyxPQUFPLENBQUN5Z0MsU0FBUyxFQUFFO0lBQ3BCemdDLE9BQU8sQ0FBQ3lnQyxTQUFTLEdBQUdELEdBQUc7RUFDM0I7RUFDQSxJQUFNeDBCLFdBQVcsR0FBR3cwQixHQUFHLEdBQUd4Z0MsT0FBTyxDQUFDeWdDLFNBQVM7RUFDM0MsSUFBSUMsaUJBQWlCLEdBQUcxMEIsV0FBVyxHQUFHaE0sT0FBTyxDQUFDeW1CLFFBQVE7RUFDdEQsSUFBSWthLFNBQVMsR0FBRzNnQyxPQUFPLENBQUMybUIsTUFBTSxDQUFDM2EsV0FBVyxFQUFFaE0sT0FBTyxDQUFDbWdDLGNBQWMsRUFBRW5nQyxPQUFPLENBQUNvZ0MsY0FBYyxFQUFFcGdDLE9BQU8sQ0FBQ3ltQixRQUFRLENBQUM7RUFDN0csSUFBSWlhLGlCQUFpQixFQUFFO0lBQ25CbHdCLE9BQU8sQ0FBQ3ZXLEtBQUssQ0FBQ0YsTUFBTSxNQUFBSSxNQUFBLENBQU13bUMsU0FBUyxDQUFDLzhCLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBSTtJQUNsRGxJLE1BQU0sQ0FBQzRrQyxxQkFBcUIsQ0FBQyxVQUFDQyxTQUFTO01BQUEsT0FBSzc2QixPQUFPLENBQUM4SyxPQUFPLEVBQUV4USxPQUFPLEVBQUV1Z0MsU0FBUyxDQUFDO0lBQUEsRUFBQztFQUNyRixDQUFDLE1BQ0k7SUFDRCxJQUFJdmdDLE9BQU8sQ0FBQ3FULFNBQVMsS0FBSzBzQixVQUFVLENBQUNFLEtBQUssRUFBRTtNQUN4Q3p2QixPQUFPLENBQUN2VyxLQUFLLENBQUM0bEIsT0FBTyxHQUFHLE1BQU07SUFDbEM7SUFDQSxJQUFJN2YsT0FBTyxDQUFDcVQsU0FBUyxLQUFLMHNCLFVBQVUsQ0FBQ0MsSUFBSSxFQUFFO01BQ3ZDeHZCLE9BQU8sQ0FBQ3ZXLEtBQUssQ0FBQzRsQixPQUFPLEdBQUc3ZixPQUFPLENBQUM2ZixPQUFPLEtBQUssTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPO0lBQ3pFO0lBQ0ErZ0IsNEJBQTRCLENBQUNwd0IsT0FBTyxDQUFDO0VBQ3pDO0FBQ0osQ0FBQztBQUNELElBQU02dkIseUJBQXlCLEdBQUcsU0FBNUJBLHlCQUF5QkEsQ0FBSTd2QixPQUFPLEVBQTRCO0VBQUEsSUFBMUIwdkIsV0FBVyxHQUFBdjdCLFNBQUEsQ0FBQWxNLE1BQUEsUUFBQWtNLFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsT0FBTztFQUM3RDZMLE9BQU8sQ0FBQ3ZXLEtBQUssQ0FBQzRsQixPQUFPLEdBQUdxZ0IsV0FBVyxLQUFLLE1BQU0sR0FBRyxNQUFNLEdBQUcsT0FBTztFQUNqRTF2QixPQUFPLENBQUN2VyxLQUFLLENBQUM0bUMsUUFBUSxHQUFHLFFBQVE7RUFDakNyd0IsT0FBTyxDQUFDdlcsS0FBSyxDQUFDNm1DLFNBQVMsR0FBRyxHQUFHO0VBQzdCdHdCLE9BQU8sQ0FBQ3ZXLEtBQUssQ0FBQzhtQyxZQUFZLEdBQUcsR0FBRztFQUNoQ3Z3QixPQUFPLENBQUN2VyxLQUFLLENBQUMrbUMsVUFBVSxHQUFHLEdBQUc7RUFDOUJ4d0IsT0FBTyxDQUFDdlcsS0FBSyxDQUFDZ25DLGFBQWEsR0FBRyxHQUFHO0FBQ3JDLENBQUM7QUFDRCxJQUFNTCw0QkFBNEIsR0FBRyxTQUEvQkEsNEJBQTRCQSxDQUFJcHdCLE9BQU8sRUFBSztFQUM5Q0EsT0FBTyxDQUFDdlcsS0FBSyxDQUFDRixNQUFNLEdBQUcsSUFBSTtFQUMzQnlXLE9BQU8sQ0FBQ3ZXLEtBQUssQ0FBQzRtQyxRQUFRLEdBQUcsSUFBSTtFQUM3QnJ3QixPQUFPLENBQUN2VyxLQUFLLENBQUM2bUMsU0FBUyxHQUFHLElBQUk7RUFDOUJ0d0IsT0FBTyxDQUFDdlcsS0FBSyxDQUFDOG1DLFlBQVksR0FBRyxJQUFJO0VBQ2pDdndCLE9BQU8sQ0FBQ3ZXLEtBQUssQ0FBQyttQyxVQUFVLEdBQUcsSUFBSTtFQUMvQnh3QixPQUFPLENBQUN2VyxLQUFLLENBQUNnbkMsYUFBYSxHQUFHLElBQUk7QUFDdEMsQ0FBQztBQUVNLElBQU1DLGFBQWEsR0FBRyxTQUFoQkEsYUFBYUEsQ0FBSTF3QixPQUFPLEVBQWdCO0VBQUEsSUFBZG9pQixJQUFJLEdBQUFqdUIsU0FBQSxDQUFBbE0sTUFBQSxRQUFBa00sU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxDQUFDLENBQUM7RUFDNUMsSUFBSWpKLE1BQU0sQ0FBQ3lsQyxnQkFBZ0IsQ0FBQzN3QixPQUFPLENBQUMsQ0FBQ3FQLE9BQU8sS0FBSyxNQUFNLEVBQUU7SUFDckQsT0FBT3dCLFdBQVcsQ0FBQzdRLE9BQU8sRUFBRW9pQixJQUFJLENBQUM7RUFDckMsQ0FBQyxNQUFNO0lBQ0gsT0FBT3RSLFNBQVMsQ0FBQzlRLE9BQU8sRUFBRW9pQixJQUFJLENBQUM7RUFDbkM7QUFDSixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQzlGRCxJQUFNK00sV0FBVyxHQUFHLFNBQWRBLFdBQVdBLENBQUluakMsS0FBSyxFQUFLO0VBQzNCLElBQUk2SyxNQUFNLENBQUMrNUIsU0FBUyxFQUFFO0lBQ2xCLE9BQU8vNUIsTUFBTSxDQUFDKzVCLFNBQVMsQ0FBQzVrQyxLQUFLLENBQUM7RUFDbEMsQ0FBQyxNQUNJO0lBQ0QsT0FBTyxPQUFPQSxLQUFLLEtBQUssUUFBUSxJQUFJNmtDLFFBQVEsQ0FBQzdrQyxLQUFLLENBQUMsSUFBSWdILElBQUksQ0FBQzg5QixLQUFLLENBQUM5a0MsS0FBSyxDQUFDLEtBQUtBLEtBQUs7RUFDdEY7QUFDSixDQUFDO0FBRUQsSUFBTStrQyxVQUFVLEdBQUcsU0FBYkEsVUFBVUEsQ0FBSUMsQ0FBQyxFQUFLO0VBQ3RCLE9BQ0loQyxPQUFBLENBQU9nQyxDQUFDLE1BQUssUUFBUSxJQUNyQkEsQ0FBQyxLQUFLLElBQUksSUFDVkEsQ0FBQyxDQUFDckMsV0FBVyxJQUNieFcsTUFBTSxDQUFDckksU0FBUyxDQUFDdVYsUUFBUSxDQUFDclYsSUFBSSxDQUFDZ2hCLENBQUMsQ0FBQyxDQUFDamhCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRO0FBRW5FLENBQUM7QUFFRCxJQUFNdkgsV0FBVyxHQUFHLFNBQWRBLFdBQVdBLENBQUl5b0IsR0FBRyxFQUFNO0VBQzFCO0VBQ0E7O0VBRUEsSUFBR0EsR0FBRyxJQUFJLElBQUksRUFDVixPQUFPLEtBQUs7RUFFaEIsSUFBSSxPQUFPQSxHQUFHLEtBQUssU0FBUyxFQUM1QjtJQUNJLE9BQVFBLEdBQUcsS0FBSyxJQUFJO0VBQ3hCO0VBRUEsSUFBRyxPQUFPQSxHQUFHLEtBQUssUUFBUSxFQUMxQjtJQUNJLElBQUdBLEdBQUcsSUFBSSxFQUFFLEVBQ1IsT0FBTyxLQUFLO0lBRWhCQSxHQUFHLEdBQUdBLEdBQUcsQ0FBQzlnQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztJQUNuQyxJQUFHOGdDLEdBQUcsQ0FBQzFnQyxXQUFXLENBQUMsQ0FBQyxJQUFJLE1BQU0sSUFBSTBnQyxHQUFHLENBQUMxZ0MsV0FBVyxDQUFDLENBQUMsSUFBSSxLQUFLLEVBQ3hELE9BQU8sSUFBSTtJQUVmMGdDLEdBQUcsR0FBR0EsR0FBRyxDQUFDOWdDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO0lBQzVCOGdDLEdBQUcsR0FBR0EsR0FBRyxDQUFDOWdDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDO0VBQ3hDOztFQUVBO0VBQ0E7RUFDQSxJQUFHLENBQUMrZ0MsS0FBSyxDQUFDRCxHQUFHLENBQUMsRUFDVixPQUFRLzlCLFVBQVUsQ0FBQys5QixHQUFHLENBQUMsSUFBSSxDQUFDO0VBRWhDLE9BQU8sS0FBSztBQUNoQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ2hERCxJQUFNRSxXQUFXLEdBQUcsU0FBZEEsV0FBV0EsQ0FBSUMsSUFBSSxFQUFFcHlCLEtBQUssRUFBRXF5QixTQUFTLEVBQUs7RUFDNUMsSUFBSUMsT0FBTztFQUNYLE9BQU8sWUFBYTtJQUFBLFNBQUFuUCxJQUFBLEdBQUFodUIsU0FBQSxDQUFBbE0sTUFBQSxFQUFUbTZCLElBQUksT0FBQXZTLEtBQUEsQ0FBQXNTLElBQUEsR0FBQUUsSUFBQSxNQUFBQSxJQUFBLEdBQUFGLElBQUEsRUFBQUUsSUFBQTtNQUFKRCxJQUFJLENBQUFDLElBQUEsSUFBQWx1QixTQUFBLENBQUFrdUIsSUFBQTtJQUFBO0lBQ1gsSUFBTWtQLFNBQVMsR0FBR0gsSUFBSSxDQUFDelksSUFBSSxDQUFBOEosS0FBQSxDQUFUMk8sSUFBSSxHQUFNbGxDLEtBQUksRUFBQXZDLE1BQUEsQ0FBS3k0QixJQUFJLEVBQUM7SUFDMUNvUCxZQUFZLENBQUNGLE9BQU8sQ0FBQztJQUNyQixJQUFJRCxTQUFTLElBQUksQ0FBQ0MsT0FBTyxFQUFFO01BQ3ZCQyxTQUFTLENBQUMsQ0FBQztJQUNmO0lBQ0EsSUFBTUUsVUFBVSxHQUFHSixTQUFTLEdBQUcsWUFBTTtNQUFFQyxPQUFPLEdBQUcsSUFBSTtJQUFDLENBQUMsR0FBR0MsU0FBUztJQUNuRUQsT0FBTyxHQUFHam5DLFVBQVUsQ0FBQ29uQyxVQUFVLEVBQUV6eUIsS0FBSyxDQUFDO0VBQzNDLENBQUM7QUFDTCxDQUFDO0FBRUQsSUFBTXFSLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFJK2dCLElBQUksRUFBRXB5QixLQUFLLEVBQUVxeUIsU0FBUyxFQUFLO0VBQzVDLElBQUlDLE9BQU87RUFDWCxPQUFPLFlBQWE7SUFBQSxTQUFBSSxLQUFBLEdBQUF2OUIsU0FBQSxDQUFBbE0sTUFBQSxFQUFUbTZCLElBQUksT0FBQXZTLEtBQUEsQ0FBQTZoQixLQUFBLEdBQUFDLEtBQUEsTUFBQUEsS0FBQSxHQUFBRCxLQUFBLEVBQUFDLEtBQUE7TUFBSnZQLElBQUksQ0FBQXVQLEtBQUEsSUFBQXg5QixTQUFBLENBQUF3OUIsS0FBQTtJQUFBO0lBQ1gsSUFBTUosU0FBUyxHQUFHSCxJQUFJLENBQUN6WSxJQUFJLENBQUE4SixLQUFBLENBQVQyTyxJQUFJLEdBQU1sbEMsS0FBSSxFQUFBdkMsTUFBQSxDQUFLeTRCLElBQUksRUFBQztJQUMxQyxJQUFJa1AsT0FBTyxFQUFFO01BQ1Q7SUFDSjtJQUNBLElBQUlELFNBQVMsSUFBSSxDQUFDQyxPQUFPLEVBQUU7TUFDdkJDLFNBQVMsQ0FBQyxDQUFDO0lBQ2Y7SUFDQUQsT0FBTyxHQUFHam5DLFVBQVUsQ0FBQyxZQUFNO01BQ3ZCLElBQUcsQ0FBQ2duQyxTQUFTLEVBQUU7UUFDWEUsU0FBUyxDQUFDLENBQUM7TUFDZjtNQUNBRCxPQUFPLEdBQUcsSUFBSTtJQUNsQixDQUFDLEVBQUV0eUIsS0FBSyxDQUFDO0VBQ2IsQ0FBQztBQUNMLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQy9CRDtBQUNBOztBQUVPLFNBQVM4UyxnQkFBZ0JBLENBQUEsRUFBRztFQUUvQjtFQUNBLFNBQVM4ZixlQUFlQSxDQUFDcHpCLE9BQU8sRUFBRXhFLFFBQVEsRUFBRTtJQUN4Q3dFLE9BQU8sQ0FBQ3JWLE9BQU8sQ0FBQyxVQUFBc1YsS0FBSyxFQUFJO01BQ3JCLElBQUlBLEtBQUssQ0FBQ0MsY0FBYyxFQUFFO1FBQ3RCRCxLQUFLLENBQUN4UCxNQUFNLENBQUNtSixPQUFPLENBQUNqTixNQUFNLEdBQUcsSUFBSTtRQUNsQyxJQUFJc1QsS0FBSyxDQUFDeFAsTUFBTSxDQUFDbUosT0FBTyxDQUFDdWYsSUFBSSxLQUFLLE1BQU0sRUFBRTtVQUN0QzNkLFFBQVEsQ0FBQ2tPLFNBQVMsQ0FBQ3pKLEtBQUssQ0FBQ3hQLE1BQU0sQ0FBQztRQUNwQztNQUNKLENBQUMsTUFBTTtRQUNId1AsS0FBSyxDQUFDeFAsTUFBTSxDQUFDbUosT0FBTyxDQUFDak4sTUFBTSxHQUFHLEtBQUs7TUFDdkM7SUFDSixDQUFDLENBQUM7RUFDTjs7RUFFQTtFQUNBLFNBQVMwbUMsY0FBY0EsQ0FBQ3JpQyxPQUFPLEVBQUVrTCxRQUFRLEVBQUVpZCxJQUFJLEVBQUU7SUFDN0MsSUFBTTNkLFFBQVEsR0FBRyxJQUFJcUYsb0JBQW9CLENBQUN1eUIsZUFBZSxFQUFFcGlDLE9BQU8sQ0FBQztJQUNuRTVHLFFBQVEsQ0FBQ00sZ0JBQWdCLENBQUN3UixRQUFRLENBQUMsQ0FBQ3ZSLE9BQU8sQ0FBQyxVQUFBNlcsT0FBTyxFQUFJO01BQ25EQSxPQUFPLENBQUM1SCxPQUFPLENBQUN1ZixJQUFJLEdBQUdBLElBQUksQ0FBQzBOLFFBQVEsQ0FBQyxDQUFDO01BQ3RDcnJCLFFBQVEsQ0FBQ0UsT0FBTyxDQUFDOEYsT0FBTyxDQUFDO0lBQzdCLENBQUMsQ0FBQztFQUNOOztFQUVBO0VBQ0EsSUFBTTh4QixRQUFRLEdBQUc7SUFDYnh5QixTQUFTLEVBQUUsR0FBRztJQUNkK0QsSUFBSSxFQUFFLElBQUksQ0FBRTtFQUNoQixDQUFDO0VBRUQsSUFBTTB1QixRQUFRLEdBQUc7SUFDYkMsVUFBVSxFQUFFLG9CQUFvQixDQUFFO0VBQ3RDLENBQUM7RUFFRCxJQUFNQyxRQUFRLEdBQUc7SUFDYjN5QixTQUFTLEVBQUUsQ0FBQztJQUNaK0QsSUFBSSxFQUFFO0VBQ1YsQ0FBQzs7RUFFRDtFQUNBd3VCLGNBQWMsQ0FBQ0MsUUFBUSxFQUFFLCtKQUErSixFQUFFLElBQUksQ0FBQztFQUMvTEQsY0FBYyxDQUFDRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQztFQUN4Q0YsY0FBYyxDQUFDSSxRQUFRLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQztBQUVqRDs7Ozs7Ozs7Ozs7Ozs7QUNoRE8sU0FBU2xnQixVQUFVQSxDQUFBLEVBQUc7RUFFekI3bUIsTUFBTSxDQUFDZ25DLE1BQU0sR0FBRyxZQUFZO0lBQ3hCLElBQU1DLElBQUksR0FBR3ZwQyxRQUFRLENBQUN3cEMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0lBQUEsSUFBQUMsS0FBQSxZQUFBQSxNQUFBLEVBQzFCO01BQ2xDLElBQUlDLFFBQVEsR0FBR0gsSUFBSSxDQUFDLzhCLENBQUMsQ0FBQyxDQUFDdk0sYUFBYSxDQUFDLE9BQU8sQ0FBQztNQUM3Q3NwQyxJQUFJLENBQUMvOEIsQ0FBQyxDQUFDLENBQUN4TCxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsVUFBVTBDLENBQUMsRUFBRTtRQUMvQ2dtQyxRQUFRLENBQUMxMkIsSUFBSSxDQUFDLENBQUM7TUFDbkIsQ0FBQyxDQUFDO01BQ0Z1MkIsSUFBSSxDQUFDLzhCLENBQUMsQ0FBQyxDQUFDeEwsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLFVBQVUwQyxDQUFDLEVBQUU7UUFDOUNnbUMsUUFBUSxDQUFDLzJCLEtBQUssQ0FBQyxDQUFDO01BQ3BCLENBQUMsQ0FBQztJQUNOLENBQUM7SUFSRCxLQUFLLElBQUluRyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcrOEIsSUFBSSxDQUFDbHFDLE1BQU0sRUFBRW1OLENBQUMsRUFBRTtNQUFBaTlCLEtBQUE7SUFBQTtFQVN4QyxDQUFDO0FBRUw7Ozs7Ozs7Ozs7QUNmQTs7Ozs7O1VDQUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7VUFDQSxzQkFBc0I7VUFDdEIsb0RBQW9ELHVCQUF1QjtVQUMzRTtVQUNBO1VBQ0EsR0FBRztVQUNIO1VBQ0E7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7Ozs7O1dDeENBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EseUNBQXlDLHdDQUF3QztXQUNqRjtXQUNBO1dBQ0E7Ozs7O1dDUEE7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7Ozs7V0NKQSx3Q0FBd0M7Ozs7O1dDQXhDLHFDQUFxQzs7Ozs7V0NBckMsOENBQThDOzs7OztXQ0E5QztXQUNBO1dBQ0E7V0FDQTtXQUNBLHVCQUF1Qiw0QkFBNEI7V0FDbkQ7V0FDQTtXQUNBO1dBQ0EsaUJBQWlCLG9CQUFvQjtXQUNyQztXQUNBLHNDQUFzQyxZQUFZO1dBQ2xEO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7O1dBR0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSw0Q0FBNEMsbUJBQW1CO1dBQy9EO1dBQ0E7V0FDQSxtRUFBbUUsaUNBQWlDO1dBQ3BHO1dBQ0E7V0FDQTtXQUNBOzs7OztXQ3pDQTtXQUNBO1dBQ0E7V0FDQSx1REFBdUQsaUJBQWlCO1dBQ3hFO1dBQ0EsZ0RBQWdELGFBQWE7V0FDN0Q7Ozs7O1dDTkE7V0FDQTs7V0FFQTtXQUNBO1dBQ0E7O1dBRUE7V0FDQTtXQUNBOztXQUVBO1dBQ0E7V0FDQTs7V0FFQTtXQUNBO1dBQ0E7O1dBRUE7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLENBQUM7O1dBRUQ7V0FDQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLEtBQUs7V0FDTDtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxJQUFJO1dBQ0o7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxJQUFJO1dBQ0o7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsMkJBQTJCO1dBQzNCLDRCQUE0QjtXQUM1QiwyQkFBMkI7V0FDM0I7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsR0FBRzs7V0FFSDtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxvQkFBb0IsZ0JBQWdCO1dBQ3BDO1dBQ0E7V0FDQTtXQUNBLEtBQUs7V0FDTDtXQUNBO1dBQ0E7V0FDQSxHQUFHO1dBQ0g7V0FDQTtXQUNBO1dBQ0Esb0JBQW9CLGdCQUFnQjtXQUNwQztXQUNBO1dBQ0EsR0FBRztXQUNIO1dBQ0E7V0FDQSxHQUFHO1dBQ0g7V0FDQTtXQUNBLEdBQUc7V0FDSDtXQUNBO1dBQ0E7V0FDQSxHQUFHO1dBQ0g7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxNQUFNO1dBQ047V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLE1BQU07V0FDTjtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLEdBQUc7O1dBRUg7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsR0FBRztXQUNIO1dBQ0E7V0FDQSxHQUFHO1dBQ0g7V0FDQTtXQUNBO1dBQ0EsR0FBRzs7V0FFSDtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7V0FDQTtXQUNBOztXQUVBLGlCQUFpQixxQ0FBcUM7V0FDdEQ7O1dBRUEsZ0RBQWdEO1dBQ2hEOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLG9CQUFvQixpQkFBaUI7V0FDckM7V0FDQTtXQUNBO1dBQ0EsR0FBRztXQUNIO1dBQ0E7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLEdBQUc7V0FDSCxFQUFFO1dBQ0Y7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7V0FFQTtXQUNBO1dBQ0E7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLE1BQU07V0FDTjtXQUNBO1dBQ0E7V0FDQTtXQUNBLFFBQVE7V0FDUjtXQUNBO1dBQ0EsUUFBUTtXQUNSO1dBQ0EsTUFBTTtXQUNOLEtBQUs7V0FDTCxJQUFJO1dBQ0osR0FBRztXQUNIOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxHQUFHO1dBQ0g7V0FDQTtXQUNBOztXQUVBO1dBQ0E7O1dBRUE7O1dBRUE7V0FDQTtXQUNBLEVBQUU7V0FDRjs7V0FFQTtXQUNBO1dBQ0E7V0FDQSxHQUFHO1dBQ0g7O1dBRUE7V0FDQTtXQUNBO1dBQ0EsR0FBRztXQUNIOztXQUVBO1dBQ0E7O1dBRUE7V0FDQTtXQUNBLEVBQUU7O1dBRUY7V0FDQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0Esb0JBQW9CLG9CQUFvQjtXQUN4QztXQUNBO1dBQ0E7V0FDQTtXQUNBLEVBQUU7O1dBRUY7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLElBQUk7V0FDSjs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLEtBQUs7V0FDTDtXQUNBLElBQUk7V0FDSjs7V0FFQTtXQUNBO1dBQ0EsR0FBRztXQUNILEVBQUU7V0FDRjs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxJQUFJO1dBQ0osR0FBRztXQUNIO1dBQ0E7V0FDQTtXQUNBOzs7OztXQ25ZQTs7Ozs7V0NBQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7O1dBRUE7O1dBRUE7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLEVBQUU7V0FDRjs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsR0FBRztXQUNIO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLG1CQUFtQiwyQkFBMkI7V0FDOUM7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLEtBQUs7V0FDTDtXQUNBOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBOztXQUVBO1dBQ0Esa0JBQWtCLGNBQWM7V0FDaEM7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBOztXQUVBO1dBQ0E7V0FDQTtXQUNBLGNBQWMsTUFBTTtXQUNwQjtXQUNBO1dBQ0E7V0FDQSxLQUFLO1dBQ0w7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLGNBQWMsYUFBYTtXQUMzQjtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7V0FDQTtXQUNBLGlCQUFpQiw0QkFBNEI7V0FDN0M7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLElBQUk7V0FDSjtXQUNBOztXQUVBOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsSUFBSTtXQUNKOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7V0FFQTs7V0FFQTtXQUNBO1dBQ0EsZ0JBQWdCLDRCQUE0QjtXQUM1QztXQUNBO1dBQ0E7O1dBRUE7V0FDQTs7V0FFQTtXQUNBOztXQUVBO1dBQ0E7O1dBRUE7V0FDQSxnQkFBZ0IsNEJBQTRCO1dBQzVDO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLGtCQUFrQix1Q0FBdUM7V0FDekQ7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxHQUFHO1dBQ0g7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7V0FDQSxtQkFBbUIsaUNBQWlDO1dBQ3BEO1dBQ0E7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxzQkFBc0IsdUNBQXVDO1dBQzdEO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHNCQUFzQixzQkFBc0I7V0FDNUM7V0FDQTtXQUNBLFNBQVM7V0FDVDtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsV0FBVztXQUNYLFdBQVc7V0FDWDtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLFlBQVk7V0FDWjtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxVQUFVO1dBQ1Y7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsV0FBVztXQUNYO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBOztXQUVBO1dBQ0EsbUJBQW1CLHdDQUF3QztXQUMzRDtXQUNBO1dBQ0E7V0FDQTtXQUNBLE1BQU07V0FDTjtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsUUFBUTtXQUNSLFFBQVE7V0FDUjtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxTQUFTO1dBQ1Q7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsT0FBTztXQUNQO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxRQUFRO1dBQ1I7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLEVBQUUsSUFBSTtXQUNOO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxJQUFJO1dBQ0o7V0FDQTtXQUNBLEVBQUU7V0FDRjtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQSxzQ0FBc0M7V0FDdEM7V0FDQTtXQUNBLEVBQUU7V0FDRjs7V0FFQTs7V0FFQTs7Ozs7VUU5ZkE7VUFDQTtVQUNBO1VBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL2F1dG8tdGFicy5qcyIsIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL2JhLWNvbGxhcHNlci5qcyIsIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL2JhLXNpbmdsZS5qcyIsIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL2JhY2stdG8tdG9wLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvYm94LWN0YS13aWRnZXQtY29va2llLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvY2FsY3VsYXRvci13aWRnZXQuanMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9jYWxjdWxhdG9yLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvY2FzZS1zdHVkaWVzLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvY2FzZS1zdHVkeS10YWJzLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvY29udi1jYWxjLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvZXhwYW5kLWltYWdlLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvZmFrZS1tZW51LmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvZm9vdC1hY2NvcmRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9mb290ZXItaG92ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9nLWZvcm1zLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvaGVyby1wbGF5ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9sb2FkLW1vcmUtcHJvamVjdHMuanMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9sb2FkLW1vcmUtc29sdXRpb25zLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvbG9jYXRpb24tYWNjb3JkaW9uLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvbG9nby1zbGlkZXIuanMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9tZW51LWhvdmVyLWVmZmVjdC5qcyIsIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL3BhdXNlLWhlcm8tYW5pbS5qcyIsIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL3Byb2dyZXNzLWJhci5qcyIsIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL3JlYWQtbW9yZS5qcyIsIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL3Njcm9sbGVyLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvc2l0ZS1zZWFyY2guanMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9zdGlja3ktd2hpdGVwYXBlci5qcyIsIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL3RhYnMtdW5kZXJsaW5lLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvdG9nZ2xlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vZnVuY3Rpb24tY2FsbHMvYWNjb3JkaW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9mdW5jdGlvbi1jYWxscy9hY2NvcmRpb25zL2FjY29yZGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vZnVuY3Rpb24tY2FsbHMvYm94LWN0YS1wb3NpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9mdW5jdGlvbi1jYWxscy9zbGlkZXJzLmpzIiwid2VicGFjazovLy8uL2Z1bmN0aW9uLWNhbGxzL3NsaWRlcnMvc2xpZGVyLWFkdmFuY2VkLmpzIiwid2VicGFjazovLy8uL2Z1bmN0aW9uLWNhbGxzL3NsaWRlcnMvc2xpZGVyLWJhLmpzIiwid2VicGFjazovLy8uL2Z1bmN0aW9uLWNhbGxzL3NsaWRlcnMvc2xpZGVyLWRzYmxzLmpzIiwid2VicGFjazovLy8uL2Z1bmN0aW9uLWNhbGxzL3NsaWRlcnMvc2xpZGVyLXNpbXBsZS5qcyIsIndlYnBhY2s6Ly8vLi9mdW5jdGlvbi1jYWxscy9zbGlkZXJzL3NsaWRlci12ZXJ0aWNhbC5qcyIsIndlYnBhY2s6Ly8vLi9mdW5jdGlvbi1jYWxscy90YWJzLXRvLWFjY29yZGlvbi1tb2JpbGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnVuY3Rpb24tY2FsbHMvdGlueW1jZS1yZWFkLW1vcmUvcmVhZC1tb3JlLmpzIiwid2VicGFjazovLy8uL2hlYWRlci9tb2JpbGUtbmF2LmpzIiwid2VicGFjazovLy8uL2hlYWRlci9zdGlja3ktaGVhZGVyLmpzIiwid2VicGFjazovLy8uL2hlYWRlci90b2dnbGUtc3VibWVudS5qcyIsIndlYnBhY2s6Ly8vLi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L2FuaW1hdGlvbnMvZWFzaW5ncy1lczYuanMiLCJ3ZWJwYWNrOi8vLy4vbGlicmFyeS9hbmltYXRpb25zL3Njcm9sbC10by5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L2NvbGxhcHNlcnMvZ3JpZGRlci1pbml0LmpzIiwid2VicGFjazovLy8uL2xpYnJhcnkvY291bnRlcnMvcHVyZWNvdW50ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbGlicmFyeS9tZWRpYS1jb250cm9scy9tZWRpYS1jb250cm9sLmpzIiwid2VicGFjazovLy8uL2xpYnJhcnkvc2xpZGVycy9zbGlkZXItZHNibHMuanMiLCJ3ZWJwYWNrOi8vLy4vbGlicmFyeS9zbGlkZXJzL3NsaWRlci1vcHRpb25zL2F1dG9wbGF5LmpzIiwid2VicGFjazovLy8uL2xpYnJhcnkvc2xpZGVycy9zbGlkZXItb3B0aW9ucy9icmVha3BvaW50cy5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L3NsaWRlcnMvc2xpZGVyLW9wdGlvbnMvZWZmZWN0cy5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L3NsaWRlcnMvc2xpZGVyLW9wdGlvbnMvbGF6eS5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L3NsaWRlcnMvc2xpZGVyLW9wdGlvbnMvbG9vcC5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L3NsaWRlcnMvc2xpZGVyLW9wdGlvbnMvbmF2aWdhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L3NsaWRlcnMvc2xpZGVyLW9wdGlvbnMvc2xpZGUtdG8tY2xpY2tlZC1zbGlkZS5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L3NsaWRlcnMvc3dpcGVyLXdpdGgtdGFicy5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L3RhYnMtYWNjb3JkaW9ucy9EU01QQWNjb3JkaW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L3RhYnMtYWNjb3JkaW9ucy9EU01QVGFicy1kcm9wZG93bi5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L3RhYnMtYWNjb3JkaW9ucy9EU01QVGFicy10YWIuanMiLCJ3ZWJwYWNrOi8vLy4vbGlicmFyeS90YWJzLWFjY29yZGlvbnMvRFNNUFRhYnMtdGFiZHJvcGRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbGlicmFyeS90YWJzLWFjY29yZGlvbnMvRFNNUFRhYnNDbGFzcy5qcyIsIndlYnBhY2s6Ly8vLi9saWJyYXJ5L3RhYnMtYWNjb3JkaW9ucy9EU01QVGFic1RvQWNjb3JkaW9uTW9iaWxlLmpzIiwid2VicGFjazovLy8uL2xpYnJhcnkvdGFicy1hY2NvcmRpb25zL3RhYi1hY2NvcmRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbGlicmFyeS90YWJzLWFjY29yZGlvbnMvdGFiLXNpbmdsZS5qcyIsIndlYnBhY2s6Ly8vLi9sb2FkLW1vcmUvbG9hZC1tb3JlLXBvc3RzLmpzIiwid2VicGFjazovLy8uL3BhdGNoZXMvdGFic1RhYkRyb3AuanMiLCJ3ZWJwYWNrOi8vLy4vdXRpbHMvdV9jbGFzc2xpc3QtYWRkLXJlbW92ZS5qcyIsIndlYnBhY2s6Ly8vLi91dGlscy91X2VsLWluLXZpZXdwb3J0LWRldGVjdC5qcyIsIndlYnBhY2s6Ly8vLi91dGlscy91X2ZhZGUtaW4tb3V0LmpzIiwid2VicGFjazovLy8uL3V0aWxzL3VfaXMtdG91Y2gtZGV2aWNlLmpzIiwid2VicGFjazovLy8uL3V0aWxzL3Vfb2JqZWN0X2V4dGVuZC5qcyIsIndlYnBhY2s6Ly8vLi91dGlscy91X3NsaWRlLXVwLWRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vdXRpbHMvdV90eXBlcy5qcyIsIndlYnBhY2s6Ly8vLi91dGlscy91dGlscy5qcyIsIndlYnBhY2s6Ly8vLi92aXN1YWxzL3Njcm9sbC1hbmltYXRpb25zLmpzIiwid2VicGFjazovLy8uL3Zpc3VhbHMvdmlkZW8taG92ZXIuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHZhciBcImpRdWVyeVwiIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZ2V0IGphdmFzY3JpcHQgdXBkYXRlIGNodW5rIGZpbGVuYW1lIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZ2V0IHVwZGF0ZSBtYW5pZmVzdCBmaWxlbmFtZSIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2dldEZ1bGxIYXNoIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvbG9hZCBzY3JpcHQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9ob3QgbW9kdWxlIHJlcGxhY2VtZW50Iiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvcHVibGljUGF0aCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2pzb25wIGNodW5rIGxvYWRpbmciLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYmVmb3JlLXN0YXJ0dXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svc3RhcnR1cCIsIndlYnBhY2s6Ly8vd2VicGFjay9hZnRlci1zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBhdXRvVGFicygpIHtcblxuICAgIGlmKCQoXCIuaGVybyAucHJvamVjdHNcIikubGVuZ3RoKXtcblxuICAgICAgICBzZXRJbnRlcnZhbChmdW5jdGlvbigpe1xuICAgICAgICAgICAgdmFyIGFjdGl2ZV9hdXRvVGFiID0gJCgnLmpzLWF1dG8tbG9vcC10YWJzLmlzLWFjdGl2ZScpO1xuICAgICAgICAgICAgdmFyIGZpcnN0X2F1dG9UYWIgPSAkKCcuanMtYXV0by1sb29wLXRhYnMuZmlyc3QnKTtcblxuICAgICAgICAgICAgaWYoIGFjdGl2ZV9hdXRvVGFiLmhhc0NsYXNzKFwibGFzdFwiKSApXG4gICAgICAgICAgICAgICAgZmlyc3RfYXV0b1RhYi5jbGljaygpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGFjdGl2ZV9hdXRvVGFiLm5leHQoKS5jbGljaygpO1xuICAgICAgICB9LCA0MDAwKTtcbiAgICB9XG59XG4iLCIvKipcbiAqIFRvZ2dsZSBtb2JpbGUgbmF2XG4gKiBAcGFyYW0ge3N0cmluZ30gZWwgLSBzZWxlY3RvciBmb3IgYWRkaW5nIGFuIGFjdGl2ZSBjbGFzc1xuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBiYUNvbGxhcHNlcihlbCwgZWxUYXJnZXQpIHtcblxuICAgIGNvbnN0IGJ0biA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpO1xuICAgIGNvbnN0IGJ0blR4dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpO1xuXG4gICAgaWYgKGJ0bikge1xuXG4gICAgICAgIGNvbnN0IGJ0blRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWxUYXJnZXQpO1xuICAgICAgICBjb25zdCBidG5UYXJnZXQyID0gYnRuVGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJy5iYS1uYXYnKTtcblxuICAgICAgICBsZXQgY3VycmVudFNsaWRlID0gYnRuVGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoJy5iYS1zbGlkZXIgLnN3aXBlci1zbGlkZScpO1xuICAgICAgICBcbiAgICAgICAgY3VycmVudFNsaWRlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KXtcbiAgICAgICAgICAgIGxldCBjdXJyZW50RXhwYW5kZXIgPSBpdGVtLnF1ZXJ5U2VsZWN0b3IoJy5sLXRlc3RpbW9uaWFscyAnKTtcbiAgICAgICAgICAgIGxldCBoZWlnaHQgPSBpdGVtLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpLm9mZnNldEhlaWdodDtcblxuICAgICAgICAgICAgY3VycmVudEV4cGFuZGVyLnN0eWxlLm1heEhlaWdodCA9IGAke2hlaWdodH1weGA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50ID0+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